web-dev-qa-db-ja.com

Android getResources()。getStringArray()変数

文字列と文字列配列があるxmlファイルがあります。リスト項目をクリックするクラスがあり、他のクラスでは他の項目をリストしています。 xmlには、クリックされたアイテムの変更された名前である文字列があり、値は文字列配列名です。変数をgetResources(9.getStringArray()に追加する方法を見つけましたが、機能しません。プログラムは起動しますが、リスト項目のいずれかをクリックすると、アクティビティが機能しなくなります。クラスファイル:

String artistpicked = extras.getString("artist");
String[] firstW = artistpicked.split(" ");
firstW[0] = firstW[0].trim();
String albumSearch = firstW[0] + "_code";
int getRes = getResources().getIdentifier(albumSearch, "string", getPackageName());
String setRes = String.valueOf(getRes);
int getRes2 = getResources().getIdentifier(setRes, "array", getPackageName());
String[] albums = getResources().getStringArray(getRes2);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, albums));
TextView t = (TextView) findViewById(R.id.albumName);
t.setText(setRes);

TextViewは、変数をチェックするためにあります。 albumSearchは「modifiedartistpicked_code」を提供します、それはいいです。 getResはxml( "something_array")からの値を提供し、setResは実際のID番号(getStringArrayが必要とする)を提供します。 getRes2はgetResと同じように動作し、正常に動作することを確認するためだけに存在します。次の2行、String albums []、およびsetListAdapterをコメントアウトすると、プログラムは機能しますが、アイテムがリストされません。

Xmlファイル:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="artists_array">
        <item>code1 example</item>
        <item>code2 example</item>
    </string-array>
    <string-array name="code1_array">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
    </string-array>
    <string-array name="code2_array">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
    </string-array>
    <string name="code1_code">code1_array</string>
    <string name="code2_code">code2_array</string>
</resources>

私がしたいこと、そして何が問題なのかを書くことができたことを願っています:)

更新:

@Marc Bernstein:code1_arrayかどうかわからないから。最初に、選択したアイテムがxの場合に多くを作成し、次にR.array.x_arrayなどを読み取りました。

しかし、私は問題が何であるかを得ました、xmlの文字列の名前に大文字がありました。それが私がxmlを嫌う理由です。問題は常にそこにあります:)このxmlは単なる例でした。オリジナルははるかに大きいため、誰も助けることができませんでした。次回はもっと注意深くなります。

また、複雑すぎたので、よりシンプルにしました。

24
matthew3r

犯人は最も可能性が高いです

String[] albums = getResources().getStringArray(getRes2);

する代わりに

int getRes2 = getResources().getIdentifier(setRes, "array", getPackageName());
String[] albums = getResources().getStringArray(getRes2);

なぜ使用しないのか

String[] albums = getResources().getStringArray(R.array.code1_array);

とにかく、あなたが投稿したものから、「配列」識別子が実際にstrings.xmlファイル内に存在するとは思いません。 code1_arrayとcode2_arrayが表示されます。

48
Marc Bernstein

それは、使用したい配列を動的に決定しようとするためです。 String[] albums = getResources().getStringArray(R.array.code1_array);からのIDが与えられます。たとえば、ユーザー入力で、スピナー/エディットテキストボックスがあるとします。これは、データベースを使用する代わりに、XMLファイルの一部の文字列を使用するだけです。

6
kredo