Jor*_*her 246 xml arrays android reference preferences
我有一些首选项,您可以启用/禁用菜单上显示的项目.共有17项.我在values/arrays.xml中创建了一个字符串数组,其中包含17个项目中的每个项目的标题.
我有preferences.xml,它有我的首选项文件的布局,我想引用字符串数组中的单个项目作为标题.
我怎样才能做到这一点?
在Android开发人员参考中,我看到我如何使用XML引用单个字符串,但不知道如何使用XML引用数组资源中的字符串.
dav*_*ino 318
简而言之:我认为你不能,但似乎有一个解决方法:.
如果您在这里查看Android资源:
http://developer.android.com/guide/topics/resources/string-resource.html
您可以看到,在数组部分(至少是字符串数组)下,"RESOURCE REFERENCE"(从XML中获取)不指定解决各个项目的方法.您甚至可以尝试在XML中使用"@ array/yourarrayhere".我知道在设计时你会得到第一个项目.但是,如果你想使用它,那就没有实际用处,当然,让我们说第二个.
但是,你可以做一个技巧.看这里:
您可以通过在数组定义中查询独立字符串来"欺骗"(而不是真正)数组定义.例如,在strings.xml中:
<string name="earth">Earth</string>
<string name="moon">Moon</string>
<string-array name="system">
<item>@string/earth</item>
<item>@string/moon</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)
通过使用它,你可以在你的"android:text"和"android:title"XML字段中正常使用"@ string/earth"和"@ string/moon",但你不会失去使用数组的能力为了你想要的目的定义.
似乎在我的Eclipse上工作.你为什么不试着告诉我们它是否有效?:-)
小智 210
也许这会有所帮助:
String[] some_array = getResources().getStringArray(R.array.your_string_array)
Run Code Online (Sandbox Code Playgroud)
所以你将array-list作为String []然后选择任何i,some_array [i].
Ami*_*esh 63
更好的选择是将资源返回的数组用作数组,这意味着:
getResources().getStringArray(R.array.your_array)[position]
这是上述方法的一种快捷方法,但是以您想要的方式工作.否则android不会为基于xml的数组提供直接的XML索引.
不幸:
您似乎无法使用XML在values/arrays.xml中引用数组中的单个项目.当然,您可以使用Java,但不能使用XML.在Android开发人员参考中没有关于这样做的信息,我在其他地方找不到任何信息.
看来你不能在首选项布局中使用数组作为键.每个密钥必须是一个具有自己密钥名称的值.
我想要完成的任务:我希望能够遍历17个首选项,检查项是否被选中,如果是,则从字符串数组中加载该首选项名称的字符串.
这是我希望完成此任务的代码:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
ArrayAdapter<String> itemsArrayList = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1);
String[] itemNames = getResources().getStringArray(R.array.itemNames_array);
for (int i = 0; i < 16; i++) {
if (prefs.getBoolean("itemKey[i]", true)) {
itemsArrayList.add(itemNames[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我做了什么:
我为每个项目设置了一个字符串,并引用了单个字符串.我使用首选项布局复选框标题的单字符串引用,以及我的循环数组.
为了遍历首选项,我只是将键命名为key1,key2,key3等.由于您使用字符串引用键,您可以选择在运行时"构建"键名.
这是新代码:
for (int i = 0; i < 16; i++) {
if (prefs.getBoolean("itemKey" + String.valueOf(i), true)) {
itemsArrayList.add(itemNames[i]);
}
}
Run Code Online (Sandbox Code Playgroud)