Wie implementiere ich eine Bestätigung (ja / nein) DialogPreference?


Antworten:


291

Das ist ein einfacher Alarmdialog . Federico hat Ihnen eine Website zur Verfügung gestellt, auf der Sie nachschlagen können.

Hier ist ein kurzes Beispiel, wie ein Warndialog erstellt werden kann.

new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Do you really want to whatever?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {
        Toast.makeText(MainActivity.this, "Yaay", Toast.LENGTH_SHORT).show();
    }})
 .setNegativeButton(android.R.string.no, null).show();

3
Ich weiß, wie man einen Dialog erstellt, aber mein Q über Einstellungen.
Sh1ng

1
Ihre Frage betrifft Präferenzen? In Ordnung. Werfen
Maaalte

1
Ich habe diese Quelle bereits gelesen. Ich kann benutzerdefinierte Einstellungen erstellen, die OnClick abonniert haben, und damit umgehen, aber ist dies der einfachste Weg?
Sh1ng

Ich denke schon, zumindest kenne ich keinen anderen Weg, der einfacher ist.
Maaalte

1
benutze import android.support.v7.app.AlertDialog; für einen besseren Blick ohne Thema
Majurageer als

9

Android verfügt über eine integrierte YesNoPreference-Klasse, die genau das tut, was Sie möchten (ein Bestätigungsdialog mit Ja- und Nein-Optionen). Den offiziellen Quellcode finden Sie hier .

Leider ist es im com.android.internal.preferencePaket enthalten, was bedeutet, dass es Teil der privaten APIs von Android ist und Sie nicht über Ihre Anwendung darauf zugreifen können (private API-Klassen können ohne vorherige Ankündigung geändert werden, daher lässt Google Sie nicht darauf zugreifen).

Lösung: Erstellen Sie einfach die Klasse im Paket Ihrer Anwendung neu, indem Sie den offiziellen Quellcode über den von mir angegebenen Link kopieren / einfügen. Ich habe es versucht und es funktioniert gut (es gibt keinen Grund, warum es nicht sollte).

Sie können es dann preferences.xmlwie jede andere Einstellung zu Ihrer hinzufügen . Beispiel:

<com.example.myapp.YesNoPreference
    android:dialogMessage="Are you sure you want to revert all settings to their default values?"
    android:key="com.example.myapp.pref_reset_settings_key"
    android:summary="Revert all settings to their default values."
    android:title="Reset Settings" />

Welches sieht so aus:

Bildschirmfoto


1
Tolle Lösung! Aber es gibt ein Problem mit einem der Konstruktoren dieser Klasse! Es verweist auf eine Ressource attr (com.android.internal.R.attr.yesNoPreferenceStyle)! Welches kann nicht gelöst werden. Was ist die Problemumgehung? Muss ich eine in meinem eigenen Projekt erstellen?!
Rubenjohn

3

Verwenden Sie die Absichtseinstellung, wenn Sie den XML-Einstellungsbildschirm verwenden, oder wenn Sie einen benutzerdefinierten Bildschirm verwenden, sieht der Code wie folgt aus

intentClearCookies = getPreferenceManager().createPreferenceScreen(this);
    Intent clearcookies = new Intent(PopupPostPref.this, ClearCookies.class);

    intentClearCookies.setIntent(clearcookies);
    intentClearCookies.setTitle(R.string.ClearCookies);
    intentClearCookies.setEnabled(true);
    launchPrefCat.addPreference(intentClearCookies);

Und dann erstellen Sie eine Aktivitätsklasse wie unten. Da unterschiedliche Personen unterschiedliche Ansätze verwenden können, können Sie jeden beliebigen Ansatz verwenden. Dies ist nur ein Beispiel.

public class ClearCookies extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    showDialog();
}

/**
 * @throws NotFoundException
 */
private void showDialog() throws NotFoundException {
    new AlertDialog.Builder(this)
            .setTitle(getResources().getString(R.string.ClearCookies))
            .setMessage(
                    getResources().getString(R.string.ClearCookieQuestion))
            .setIcon(
                    getResources().getDrawable(
                            android.R.drawable.ic_dialog_alert))
            .setPositiveButton(
                    getResources().getString(R.string.PostiveYesButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here

                        }
                    })
            .setNegativeButton(
                    getResources().getString(R.string.NegativeNoButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here
                        }
                    }).show();
}}

Wie bereits erwähnt, gibt es verschiedene Möglichkeiten, dies zu tun. Auf diese Weise können Sie Ihre Aufgabe erledigen. Bitte akzeptieren Sie die Antwort, wenn Sie das Gefühl haben, dass Sie das haben, was Sie wollten.


Vielen Dank! Dies ist fast genau das, was ich für meine App benötigt habe, da ich den Dialog über einen Dienst auslöse und in meinem Fall eine Aktivität zum Hosten des Dialogs benötige.
Ralph Ritoch

Liebe es. IMHO der ausführliche, aber genehmigte und korrekte Weg
John
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.