Come implementare una conferma (sì / no) DialogPreference?


Risposte:


292

Questa è una semplice finestra di dialogo di avviso , Federico ti ha dato un sito dove puoi cercare le cose.

Ecco un breve esempio di come creare una finestra di dialogo di avviso.

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
So come costruire una finestra di dialogo, ma la mia domanda sulle preferenze.
sabato

1
La tua domanda riguarda le preferenze? Va bene. Dai un'occhiata qui: kaloer.com/android-preferences
Maaalte

1
Ho già letto questa fonte. Posso creare preferenze personalizzate iscritte a OnClick e gestirle, ma è il modo più semplice?
sh1ng

Penso di sì, almeno non conosco nessun altro modo che sia più facile.
Maaalte

1
usa import android.support.v7.app.AlertDialog; per un aspetto migliore senza un tema
maggiore del

9

Android viene fornito con una classe YesNoPreference incorporata che fa esattamente ciò che desideri (una finestra di dialogo di conferma con opzioni sì e no). Vedi il codice sorgente ufficiale qui .

Sfortunatamente, è nel com.android.internal.preferencepacchetto, il che significa che fa parte delle API private di Android e non puoi accedervi dalla tua applicazione (le classi API private sono soggette a modifiche senza preavviso, da qui il motivo per cui Google non ti consente di accedervi).

Soluzione: ricrea la classe nel pacchetto della tua applicazione copiando / incollando il codice sorgente ufficiale dal link che ho fornito. L'ho provato e funziona bene (non c'è motivo per cui non dovrebbe).

Puoi quindi aggiungerlo alla tua preferences.xmlcome qualsiasi altra preferenza. Esempio:

<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" />

Che assomiglia a questo:

immagine dello schermo


1
Ottima soluzione! Ma c'è un problema con uno dei costruttori di questa classe! Fa riferimento a una risorsa attr (com.android.internal.R.attr.yesNoPreferenceStyle)! Che non può essere risolto. Qual è la soluzione alternativa? Devo crearne uno nel mio progetto ?!
reubenjohn

3

Usa la preferenza di intento se stai usando la schermata xml delle preferenze o se stai usando la tua schermata personalizzata, il codice sarà come di seguito

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);

E poi crea una classe di attività un po 'come sotto, come persone diverse con un approccio diverso puoi usare qualsiasi approccio che ti piace questo è solo un esempio.

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();
}}

Come detto prima, ci sono molti modi per farlo. questo è uno dei modi in cui puoi svolgere il tuo compito, per favore accetta la risposta se ritieni di aver ottenuto ciò che volevi.


Grazie! Questo è quasi esattamente ciò di cui avevo bisogno per la mia app poiché sto attivando la finestra di dialogo da un servizio e nel mio caso ho bisogno di un'attività per ospitare la finestra di dialogo.
Ralph Ritoch

Lo adoro. IMHO il modo verboso, ma approvato e corretto
John
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.