Преобразование Locale[] в CharSequence[] для размещения внутри ListPreference в приложении Android

#java #android #locale #listpreference

#java #Android #locale #listpreference

Вопрос:

В моем приложении для Android я хочу поместить список всех доступных локалей на телефоне в ListPreference in my PreferenceActivity , чтобы пользователь мог выбрать, какой из них он хочет изменить вывод символа валюты.

До сих пор я пробовал это:

 addPreferencesFromResource(R.xml.preferences);
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);

ListPreference listPref = (ListPreference) root.findPreference("list");
Locale[] availableLocales = Locale.getAvailableLocales();

CharSequence[] entries = new CharSequence[Locale.getAvailableLocales().length];
CharSequence[] entriesVal = new CharSequence[Locale.getAvailableLocales().length];

for (int i = 0; i < entriesVal.length; i  ) {
        entries[i] = availableLocales[i].getDisplayCountry();
        entriesVal[i] = Integer.toString(i);
}

listPref.setEntries(entries);
listPref.setEntryValues(entriesVal);
  

Я получаю исключение JavaNullPointer в этой строке listPref.setEntries(entries); , поэтому я считаю, что я неправильно сформировал свой CharSequence , поэтому ListPReference не могу его прочитать.

есть идеи?

Ответ №1:

Кажется более вероятным, что listPref на самом деле это значение равно нулю, т. Е. root.findPreference("list") Возвращается null . Это то, что вы должны изучить (и, по крайней мере, проверить) в первую очередь.

Комментарии:

1. Вы правы, какое значение ListPreference я должен искать тогда? не этот: android:key=»список»

2. @zeroFiG: Я не могу сказать, что я когда-либо занимался разработкой Android самостоятельно, так что я действительно предполагаю… но вы звонили addPreferencesFromResource ?

3. @zeroFiG: Вы уверены, что этого не должно быть root.addPreferencesFromResource ? Или вызвать findPreference this вместо root ?

4. Ах, вот ты где! ListPreference listPref = (ListPreference) this.findPreference(«список»); Спасибо!