Переменные Android getResources (). GetStringArray () - PullRequest
17 голосов
/ 18 апреля 2011

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

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

Обновление:

@ Марк Бернштейн: Потому что я не знаю, это code1_array. Сначала я сделал много, если и когда выбранный элемент был x, затем я прочитал R.array.x_array и т. Д. *

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

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

Ответы [ 2 ]

40 голосов
/ 18 апреля 2011

Преступник, скорее всего,

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.

3 голосов
/ 20 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...