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 Dialog

El 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");
        }
    }       
}
¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top