Tengo una actividad de preferencia que tiene un language
como ListPreference
que muestra la lista de idiomas disponibles. Puedo completar la lista cuando se llame a onCreate, pero deseo completar la lista cuando el usuario haga clic en ella.Cómo llenar ListPreference dinámicamente cuando onPreferenceClick se desencadena?
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;
}
}
y este es el settings.xml
(preferencia):
<?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>
busqué pero no encontré ningún resultado! Se produce una excepción cada vez que hago clic en esa lista.
Esta respuesta funciona, pero es un poco problemático si dejas que setListPreferenceData se ejecute solo enHaga clic (y no enCerencia). Eso es porque si el método setListPreferenceData toma más de una fracción de de un segundo, entonces se muestra la lista predeterminada antes de establecer los datos, y el usuario está forzado a cancelar y luego vuelve a abrir la preferencia. ¿Hay una forma de actualizar la listaPreferencia que ya se está mostrando después de que setListPreferenceData haya finalizado? – Malabarba
Si necesita un comportamiento personalizado, su mejor opción sería ampliar 'ListPreference' o' Preference'. Una solución puramente "social" sería establecer el valor del elemento de lista predeterminado en algo como –
ccpizza
Sí, tuve que extender la preferencia de la lista por mi cuenta. Pero no fue tan malo. onCreate fue el único método que necesitó sobrecargar. – Malabarba