Подтвердить что ты не робот

Android getResources(). GetStringArray() переменные

У меня есть xml файл, где есть строки и строковые массивы. У меня есть класс, где я нажимаю на listitem, а в другом классе перечисляю другие элементы. В 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 проверяет переменные. АльбомSearch дает "modifiedartistpicked_code", это хорошо. GetRes дает значение из xml ( "something_array" ), setRes дает ему фактический номер id (который требует getStringArray). GetRes2 дает то же самое, что и getRes, чтобы проверить, что он работает нормально. Когда я прокомментирую следующие две строки, альбомы String [] и 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>

Надеюсь, я смог написать то, что хотел бы сделать, и в чем проблема:)

Update:

@Marc Bernstein: Потому что я не знаю его code1_array. Сначала я сделал много, если и когда выбранный элемент был х, тогда я читаю R.array.x_array и т.д.

Но у меня есть проблема, были заглавные буквы int he имя строк в xml. Вот почему я ненавижу xml, проблема всегда есть:) Этот xml был просто примером, оригинал намного больше, поэтому никто не смог помочь. В следующий раз я буду гораздо осторожнее.

И я сделал это теперь более упрощенным, потому что вы правильно это было слишком сложно.

4b9b3361

Ответ 1

Вероятнее всего, виновник

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.

Ответ 2

Это потому, что он пытается динамически определить массив, который он хочет использовать. Идентификатор из String [] albums = getResources(). GetStringArray (R.array.code1_array); дается, скажем, при вводе пользователя, в какой-то блок spinner/edittext. Это вместо использования базы данных, просто используя некоторые строки из xml файла.