文字列と文字列配列がある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は単なる例でした。オリジナルははるかに大きいため、誰も助けることができませんでした。次回はもっと注意深くなります。
また、複雑すぎたので、よりシンプルにしました。
犯人は最も可能性が高いです
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が表示されます。
それは、使用したい配列を動的に決定しようとするためです。 String[] albums = getResources().getStringArray(
R.array.code1_array
);
からのIDが与えられます。たとえば、ユーザー入力で、スピナー/エディットテキストボックスがあるとします。これは、データベースを使用する代わりに、XMLファイルの一部の文字列を使用するだけです。