Android - Uso PREFERENCE de pantalla y guardar la configuración en / desde ContentProvider
-
22-09-2019 - |
Pregunta
Tengo mi propio proveedor de contenido personalizado que se carga una base de datos que contiene la información de configuración para mi aplicación.
Me carga la configuración de la ContentProvider en la creación de mi actividad Ajustes.
Mi configuración actividad se compone de una de EditarTexto.
basado PREFERENCE y DialogEl siguiente código muestra cómo utilizar la pantalla y editar textos de preferencia.
Así como se puede ver en la primera imagen funciona este y se muestra el menú con la información debajo.
El problema está en dos imagen, al hacer clic en una opción en el menú de la lista aparece pero está vacío, me gustaría ser capaz de cargar los datos de mi proveedor de contenido en la edición de texto en el cuadro de diálogo, por lo que en una imagen que muestra "Donal" como nombre de usuario por lo que en la imagen de dos "Donal" debería también aparecen en la edición de texto en el cuadro de diálogo.
También me gustaría ser capaz de escuchar el botón Aceptar en el cuadro de diálogo de modo que cuando un usuario cambia un ajuste puedo actualizar los datos de mi proveedor de contenido.
Puede alguien ayudarme con lo que estoy tratando de hacer?
Código
public class PreferencesApp extends PreferenceActivity {
String name;
EditTextListener etl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadSettingsFromProvider();
etl = new EditTextListener(this);
setPreferenceScreen(createPreferenceHierarchy());
}
private PreferenceScreen createPreferenceHierarchy() {
// Root
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
// Dialog based preferences
PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
dialogBasedPrefCat.setTitle(R.string.dialog_based_preferences);
root.addPreference(dialogBasedPrefCat);
// Edit text preference
EditTextPreference editTextPref = new EditTextPreference(this);
editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
editTextPref.setKey("edittext_preference");
editTextPref.setTitle(R.string.title_edittext_preference);
editTextPref.setSummary(name);
dialogBasedPrefCat.addPreference(editTextPref);
return root;
}
public class EditTextListener extends EditTextPreference{
public EditTextListener(Context context){
super(context);
}
@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String text=getEditText().getText().toString();
Log.d("DIALOG CLOSED", "OK");
}
else {
// cancel hit
Log.d("DIALOG CLOSED", "CANCEL");
}
}
}
Solución
Lookup los métodos disponibles en la Documentación .
Usted puede suscribirse a onDialogClosed
para obtener permiso o Cancelar evento de clic.
También busque en el método getEditText
que devolverá el EditarTexto del diálogo, y se puede establecer el valor allí. O aspecto aún en setText
, que tal vez puede establecer el valor de la misma. Esta tarde no probado por mí.
EDIT 1
En este momento, no se puede suscribir. Tienes que subclase el EditTextPreference
y reemplazar el método. Un ejemplo complejo es aquí, pero usted no necesita todas las cosas que usted está interesado en esto:
@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String text=getEditText().getText().toString();
}
else {
// cancel hit
}
}
EDIT 2
Se tiene que caer
etl = new EditTextListener(this);
Hay que poner en práctica su nueva clase
EditTextPreference editTextPref = new EditTextListener(this);
lo que el código se convertirá
// Edit text preference
EditTextPreference editTextPref = new EditTextListener(this);
editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
editTextPref.setKey("edittext_preference");
editTextPref.setTitle(R.string.title_edittext_preference);
editTextPref.setSummary(name);
dialogBasedPrefCat.addPreference(editTextPref);