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


Wie kann ich eine Präferenz implementieren, die einen einfachen Ja / Nein-Bestätigungsdialog anzeigt?

Für ein Beispiel, siehe Browser->Setting->Clear Cache.


75
2018-02-26 14:23


Ursprung


Antworten:


Das ist einfach WarnungsdialogFederico hat dir eine Seite gegeben, auf der du nachsehen kannst.

Hier ist ein kurzes Beispiel, wie ein Alarmdialog aufgebaut 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();

217
2018-02-26 14:39



Android verfügt über eine integrierte YesNoPreference-Klasse, die genau das tut, was Sie wollen (ein Bestätigungsdialog mit Ja und Nein-Optionen). Siehe den offiziellen Quellcode Hier.

Leider ist es in der com.android.internal.preference Paket, was bedeutet, dass es ein Teil der privaten APIs von Android ist und Sie können nicht über Ihre Anwendung darauf zugreifen (private API-Klassen können sich ohne vorherige Ankündigung ändern, daher der Grund, warum Google Sie nicht darauf zugreifen lässt).

Lösung: Erstellen Sie die Klasse einfach im Paket Ihrer Anwendung neu, indem Sie den offiziellen Quellcode aus dem 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 zu Ihrem hinzufügen preferences.xml wie jede andere Präferenz. 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" />

Das sieht so aus:

screenshot


8
2018-01-04 07:58



Verwenden Sie Intent Preference, wenn Sie Präferenz-XML-Bildschirm verwenden, oder Sie, wenn Sie einen benutzerdefinierten Bildschirm verwenden, dann wäre der Code wie folgt

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 Activity Class etwas wie unten, wie verschiedene Menschen als unterschiedliche Ansatz können Sie jede mögliche Vorgehensweise, die Sie mögen, 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 eine Reihe von Möglichkeiten, dies zu tun. Dies ist einer der Wege, wie Sie Ihre Aufgabe erledigen können, bitte akzeptieren Sie die Antwort, wenn Sie das Gefühl haben, dass Sie es haben, was Sie wollten.


3
2017-09-12 22:37



Ich habe hier eine ähnliche Frage mit einem Beispiel für die Verwendung der DialogPreference beantwortet.

Erstellen einer DialogPreference aus XML


1
2018-01-11 19:06