回答:
要するに:私はあなたができると思いますが、回避策があるように思われません:。
ここでAndroidリソースを調べた場合:
http://developer.android.com/guide/topics/resources/string-resource.html
配列セクション(少なくとも文字列配列)の下にあるように、(XMLから取得した) "リソース参照"は個々の項目をアドレス指定する方法を指定していません。XMLで「@ array / yourarrayhere」を使用することもできます。設計時に最初のアイテムを取得することを知っています。しかし、使用したい場合、それは実用的ではありません。たとえば、... 2番目です。
しかし、あなたができるトリックがあります。こちらをご覧ください:
配列の定義内で独立した文字列をアドレス指定することにより、(実際にはではなく)配列の定義を「だます」ことができます。たとえば、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>
これを使用することで、「@ string / earth」と「@ string / moon」を通常「android:text」と「android:title」のXMLフィールドで使用できますが、配列を使用する機能は失われませんそもそもあなたが意図したあらゆる目的のための定義。
私のEclipseでここで動作するようです。うまくいくか試してみませんか?:-)
strings.xml
しませんでしたがvalues-fr
、配列はフランス語バージョンで更新されました。間違っている..しかし、クールに動作します!
多分これは役立つでしょう:
String[] some_array = getResources().getStringArray(R.array.your_string_array)
したがって、配列リストをString []として取得し、任意のi、some_array [i]を選択します。
String myPref = preferences.getString(context.getResources().getString(R.string.my_pref), some_array [0]);
。my_prefは以前に何らかの値に設定されていますsome_array [x]
より良いオプションは、リソースとして返された配列を配列として使用することです:
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]);
}
}
私がしたこと:
各アイテムに単一の文字列を設定し、単一の文字列をで参照しました。設定レイアウトのチェックボックスのタイトルには単一の文字列参照を使用し、ループには配列を使用します。
設定をループするために、key1、key2、key3などのキーに名前を付けました。文字列でキーを参照するため、実行時にキー名を「ビルド」するオプションがあります。
新しいコードは次のとおりです。
for (int i = 0; i < 16; i++) {
if (prefs.getBoolean("itemKey" + String.valueOf(i), true)) {
itemsArrayList.add(itemNames[i]);
}
}
それを行う別の方法は、以下のようにstrings.xmlでリソース配列を定義することです。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE resources [
<!ENTITY supportDefaultSelection "Choose your issue">
<!ENTITY issueOption1 "Support">
<!ENTITY issueOption2 "Feedback">
<!ENTITY issueOption3 "Help">
]>
上記のリソースを使用して文字列配列を定義します
<string-array name="support_issues_array">
<item>&supportDefaultSelection;</item>
<item>&issueOption1;</item>
<item>&issueOption2;</item>
<item>&issueOption3;</item>
</string-array>
同じ文字列を他のxmlで参照しても、DRYはそのまま残ります。私が見る利点は、1つの値を変更するだけで、コード内のすべての参照に影響することです。
name
<item> s ... * sigh *にのみタグを付けることができる場合