Domanda

Ho il mio provider di contenuti proprio personalizzato che carica un database che contiene le informazioni sulle impostazioni per la mia applicazione.

ho caricare le impostazioni dal ContentProvider sulla creazione della mia attività Impostazioni.

La mia attività Impostazioni è costituito da una base di PREFERENCE e Dialog EditText di.

Il codice seguente mostra come uso dei testi schermata delle preferenze e modificare.

Quindi, come potete vedere dalla prima immagine funziona e viene visualizzato il menu con le informazioni sotto.

Il problema è a immagine di due, quando si fa clic su una scelta nel menu della finestra di dialogo si apre, ma è vuota, vorrei essere in grado di caricare i dati dal mio fornitore di contenuti nel testo di modifica nella finestra di dialogo, quindi, in un'immagine si vede "Donal" come nome utente in modo nell'immagine due "Donal" dovrebbe comparire anche nel testo di modifica nella finestra di dialogo.

Vorrei anche essere in grado di ascoltare il pulsante OK nella finestra di dialogo in modo che quando un utente modifica un ambiente posso aggiornare i dati nel mio fornitore di contenuti.

Qualcuno mi può aiutare con quello che sto cercando di fare?


Codice

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");
        }
    }       
}
È stato utile?

Soluzione

Occhiata i metodi disponibili nel Documentazione .
È possibile iscriversi a onDialogClosed per ottenere l'OK o Annulla evento Click.

Anche prendere in considerazione il metodo getEditText che restituirà l'EditText della finestra di dialogo, ed è possibile impostare il valore di lì. O anche guardare in setText, è forse possibile impostare il valore con esso. Questo in seguito non testato da me.

Modifica 1

Mi dispiace, non è possibile iscriversi. Bisogna sottoclasse la EditTextPreference e l'override del metodo. Un esempio complesso è qui ma non avete bisogno di tutte le cose che siete interessati a questa:

@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
    }
}

Modifica 2

Si deve cadere

etl = new EditTextListener(this);

È necessario implementare la nuova classe

EditTextPreference editTextPref = new EditTextListener(this);

in modo che il codice diventerà

// 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top