¿Cómo implementar una confirmación (sí / no) DialogPreference?

Respuestas:

292

Ese es un simple diálogo de alerta , Federico le dio un sitio donde puede buscar cosas.

A continuación, se muestra un breve ejemplo de cómo se puede crear un cuadro de diálogo de alerta.

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();
Maaalte
fuente
3
Sé cómo construir un diálogo, pero mi q sobre preferencias.
sh1ng
1
¿Tu pregunta es sobre preferencias? Bueno. Eche un vistazo aquí: kaloer.com/android-preferences
Maaalte
1
Ya leí esta fuente. Puedo crear preferencias personalizadas suscritas a OnClick y manejarlas, pero ¿es la forma más fácil?
sh1ng
Creo que sí, al menos no conozco otra forma que sea más fácil.
Maaalte
1
use import android.support.v7.app.AlertDialog; para una mejor apariencia sin un tema
majurageerthan
9

Android viene con una clase YesNoPreference incorporada que hace exactamente lo que quieres (un diálogo de confirmación con opciones de sí y no). Vea el código fuente oficial aquí .

Desafortunadamente, está en el com.android.internal.preference paquete, lo que significa que es parte de las API privadas de Android y no puede acceder a él desde su aplicación (las clases de API privadas están sujetas a cambios sin previo aviso, de ahí la razón por la que Google no le permite acceder a ellas).

Solución: simplemente vuelva a crear la clase en el paquete de su aplicación copiando / pegando el código fuente oficial del enlace que proporcioné. He intentado esto y funciona bien (no hay ninguna razón por la que no debería).

A continuación, puede agregarlo a su preferences.xmlpreferencia como cualquier otra. Ejemplo:

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

Que se ve así:

captura de pantalla

XåpplI'-I0llwlg'I -
fuente
1
¡Gran solución! ¡Pero hay un problema con uno de los constructores de esta clase! ¡Hace referencia a un atributo de recurso (com.android.internal.R.attr.yesNoPreferenceStyle)! Que no se puede resolver. ¿Cuál es la solución? ¿Tengo que crear uno en mi propio proyecto?
reubenjohn
3

Use Intent Preference si está usando la pantalla xml de preferencias o si está usando su pantalla personalizada, entonces el código sería el siguiente

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

Y luego cree una clase de actividad similar a la que se muestra a continuación. Como diferentes personas y diferentes enfoques, puede usar cualquier enfoque que desee, esto es solo un ejemplo.

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

Como se dijo antes, hay varias formas de hacer esto. esta es una de las formas en que puede hacer su tarea, por favor acepte la respuesta si siente que ha obtenido lo que deseaba.

PravinDodia
fuente
¡Gracias! Esto es casi exactamente lo que necesitaba para mi aplicación, ya que estoy activando el diálogo desde un servicio y, en mi caso, necesito una actividad para alojar el diálogo.
Ralph Ritoch
Quiéralo. En mi humilde opinión, la forma detallada, pero aprobada y correcta
Juan