Ссылка на строку в ресурсе массива строк с помощью xml
У меня есть настройки, где можно включить/отключить какие элементы будут отображаться в меню. Есть 17 пунктов. Я сделал массив строк в значениях / массивах.xml с заголовками для каждого из этих 17 элементов.
У меня есть предпочтения.xml, который имеет макет для моего файла настроек, и я хотел бы ссылаться на один элемент из массива строк для использования в качестве заголовка.
Как я могу это сделать?
в справочнике разработчика Android я вижу, как я могу ссылаться на один строка с XML, но не как я могу ссылаться на строку из ресурса массива в XML.
5 ответов:
короче: Я не думаю, что вы можете, но там, кажется, ошибка:.
Если вы посмотрите на ресурс Android здесь:
http://developer.android.com/guide/topics/resources/string-resource.html
вы видите, что в разделе array (string array, по крайней мере) "ссылка на ресурс" (как вы получаете из XML) не указывает способ обращения к отдельным элементам. Вы даже можете попробовать в XML использовать "@array / yourarrayhere". Я знаю, что во время разработки вы получите первый элемент. Но это не имеет практической пользы, если вы хотите использовать, скажем... второе, конечно.
однако, есть трюк, который вы можете сделать. Смотрите здесь:
ссылка на строку XML в массиве XML (Android)
вы можете "обмануть" (не совсем) определение массива, обратившись к независимым строкам внутри определения массива. Например, в вашем веревка.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 "обычно в ваших XML-полях" android:text "и" android:title", и все же вы не потеряете возможность использовать определение массива для любых целей, которые вы намеревались в первую очередь.
Кажется, работает здесь на моем затмении. Почему бы вам не попробовать и сказать нам, если это работает? : -)
может это поможет:
String[] some_array = getResources().getStringArray(R.array.your_string_array)таким образом, вы получаете массив-список в виде строки [], а затем выберите любой i, some_array[i].
лучшим вариантом было бы просто использовать возвращаемый массив ресурсов в качестве массива, значение:
getResources().getStringArray(R.array.your_array)[position]это ярлык подход вышеупомянутых подходов, но делает работу в моде вы хотите. В противном случае android не обеспечивает прямое индексирование XML для массивов на основе xml.
к сожалению:
Кажется, вы не можете ссылаться на один элемент из массива в значения/массивы.xml с 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]); } }
другой способ сделать это-определить массив ресурсов в строках.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>вы можете ссылаться на ту же строку в другие xmls, тоже сохраняя сухую нетронутой. Преимущество, которое я вижу, заключается в том, что при одном изменении значения это повлияет на все ссылки в коде.
Comments