Mam aktywność preferencji, która ma language
jako ListPreference
, która wyświetla listę dostępnych języków. Mogę wypełnić listę po wywołaniu metody onCreate, ale chcę ją wypełnić, gdy użytkownik ją kliknie.Jak dynamicznie wypełniać ListPreference po uruchomieniu onPreferenceClick?
this is the java code
:
public class SettingsActivity extends PreferenceActivity implements OnPreferenceClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
addPreferencesFromResource(R.xml.settings);
} catch (Exception e) {
}
}
@Override
public boolean onPreferenceClick(Preference preference) {
if((preference instanceof ListPreference) && (preference.getKey().equals("language"))){
ListPreference lp = (ListPreference)preference;
CharSequence[] entries = { "English", "French" };
CharSequence[] entryValues = {"1" , "2"};
lp.setEntries(entries);
lp.setDefaultValue("1");
lp.setEntryValues(entryValues);
return true;
}
return false;
}
}
i to jest settings.xml
(preferencji):
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="General Settings">
<CheckBoxPreference android:key="enabled" android:title="Application Status" android:summary="Enable or disable the application" />
<ListPreference
android:key="language"
android:title="Language"
android:dialogTitle="Application language"
android:summary="Select the Application language"
/>
</PreferenceCategory>
</PreferenceScreen>
Szukałem ale nie znaleziono wyników! Wyjątek występuje za każdym razem, gdy kliknę tę listę.
Ta odpowiedź działa, ale jest trochę błędna, jeśli zezwalasz na uruchomienie setListPreferenceData tylko onClick (a nie onCReate). To jest , ponieważ jeśli metoda setListPreferenceData zajmuje więcej niż ułamek sekundy , to przed ustawieniem danych wyświetlana jest domyślna lista, a użytkownik jest zmuszony anulować, a następnie ponownie otworzyć preferencję. Czy istnieje sposób aktualizacji listyPreferencji, która jest już wyświetlana po zakończeniu ustawiania setListPreferenceData? – Malabarba
Jeśli potrzebujesz niestandardowego zachowania, najlepszym rozwiązaniem byłoby rozszerzenie 'ListPreference' lub' Preference'. Rozwiązaniem czysto "społecznym" byłoby ustawienie domyślnej wartości pozycji listy na coś w rodzaju –
ccpizza
Tak, musiałem sam rozszerzyć listę. Ale nie było tak źle. onCreate była jedyną metodą, która wymagała przeciążenia. – Malabarba