Frage

Ich habe meinen eigenen benutzerdefinierten Inhaltsanbieter, der eine Datenbank lädt, die die Einstellungsinformationen für meine Anwendung enthält.

Ich lade die Einstellungen vom ContentProvider bei der Erstellung meiner Einstellungsaktivitäten.

Meine Einstellungsaktivitäten bestehen aus einem Einstellungsbild- und Dialogbasierten EditText.

Der folgende Code zeigt, wie ich den Präferenzbildschirm verwende und Texte bearbeite.

Wie Sie aus dem ersten Bild sehen können, funktioniert und zeigt dies das Menü mit den darunter liegenden Informationen an.

Das Problem ist in Bild zwei. Wenn ich auf eine Wahl im Menü klicke, wird im Menü angezeigt Eines zeigt "Donal" als Benutzername, sodass in Bild zwei "Donal" auch im Dialogfeld bearbeiten.

Ich möchte auch in der Lage sein, die OK -Taste im Dialogfeld anzuhören. Wenn ein Benutzer eine Einstellung ändert, kann ich die Daten in meinem Inhaltsanbieter aktualisieren.

Kann mir jemand bei dem helfen, was ich versuche zu tun?


Code

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");
        }
    }       
}
War es hilfreich?

Lösung

Suchen Sie die verfügbaren Methoden in der Dokumentation.
Sie können sich abonnieren onDialogClosed Um das OK zu erhalten oder zu stornieren, klicken Sie auf Ereignis.

Schauen Sie sich auch an getEditText Methode, die den EditText des Dialogfelds zurückgibt, und Sie können den Wert dort festlegen. Oder sogar schauen setText, Möglicherweise können Sie den Wert damit einstellen. Dies wurde später von mir ungetestet.

Bearbeiten 1

Entschuldigung, Sie können sich nicht abonnieren. Sie müssen die Unterklasse EditTextPreference und überschreiben Sie die Methode. Ein komplexes Beispiel ist hier Aber Sie brauchen nicht all das Zeug, an dem Sie interessiert sind:

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

Bearbeiten 2

Du musst fallen

etl = new EditTextListener(this);

Sie müssen Ihre neue Klasse implementieren

EditTextPreference editTextPref = new EditTextListener(this);

Der Code wird also

// 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top