web-dev-qa-db-fra.com

Comment implémenter une confirmation (oui / non) DialogPreference?

Comment puis-je implémenter une préférence qui affiche une simple boîte de dialogue de confirmation oui/non?

Pour un exemple, voir Browser->Setting->Clear Cache.

94
sh1ng

C’est un simple dialogue d’alerte , Federico vous a donné un site sur lequel vous pouvez chercher.

Voici un court exemple de la manière dont un dialogue d'alerte peut être construit.

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();
264
Maaalte

Android est livré avec une classe YesNoPreference intégrée qui fait exactement ce que vous voulez (une boîte de dialogue de confirmation avec les options oui et non). Voir le code source officiel ici .

Malheureusement, c'est dans le com.Android.internal.preference package, ce qui signifie qu'il fait partie des API privées d'Android et que vous ne pouvez y accéder à partir de votre application (les classes des API privées sont sujettes à modification sans préavis, d'où la raison pour laquelle Google ne vous permet pas d'y accéder).

Solution: recréez simplement la classe dans le package de votre application en copiant/collant le code source officiel à partir du lien que j'ai fourni. J'ai essayé cela et ça marche bien (il n'y a aucune raison pour que ça ne soit pas le cas).

Vous pouvez ensuite l'ajouter à votre preferences.xml comme toute autre préférence. Exemple:

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

Qui ressemble à ceci:

screenshot

9

Utilisez Préférence d'intention si vous utilisez l'écran de préférences XML ou si vous utilisez votre écran personnalisé, le code serait comme ci-dessous.

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

Et ensuite, créer une classe d'activité un peu comme ci-dessous, en tant qu'approche différente en tant que personne, vous pouvez utiliser n'importe quelle approche que vous aimez, ceci n'est qu'un exemple.

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

Comme dit précédemment, il y a plusieurs façons de le faire. C’est l’une des façons dont vous pouvez accomplir votre tâche. Veuillez accepter la réponse si vous estimez que vous avez obtenu ce que vous vouliez.

3
PravinDodia

J'ai répondu à une question similaire ici avec un exemple d'utilisation de DialogPreference.

création d'une DialogPreference à partir de XML

1
arberg