Android - Utilizzando PREFERENCE per visualizzare e salvare le impostazioni da / per ContentProvider
-
22-09-2019 - |
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");
}
}
}
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);