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


¿Cómo puedo implementar una preferencia que muestra un diálogo simple de confirmación de sí / no?

Para un ejemplo, ver Browser->Setting->Clear Cache.


75
2018-02-26 14:23


origen


Respuestas:


Eso es simple diálogo de alerta, Federico te dio un sitio donde puedes buscar cosas.

Aquí hay un breve ejemplo de cómo se puede construir un 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();

217
2018-02-26 14:39



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

Lamentablemente, está en el com.android.internal.preference paquete, lo que significa que es una parte de las API privadas de Android y no puedes acceder a ella desde tu aplicación (las clases API privadas están sujetas a cambios sin previo aviso, de ahí la razón por la que Google no te permite acceder a ellas).

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

Luego puede agregarlo a su preferences.xml como cualquier otra preferencia. 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í:

screenshot


8
2018-01-04 07:58



Use la preferencia de intención si está usando la pantalla de preferencia xml o si está usando su pantalla personalizada, entonces el código sería como se muestra a continuación

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 a continuación, crea la clase de actividad algo así como a continuación, ya que las personas diferentes como enfoque diferente puede utilizar cualquier enfoque que le gusta 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 hacerlo. esta es una de las formas en que puede hacer su tarea; acepte la respuesta si siente que la obtuvo de la forma que deseaba.


3
2017-09-12 22:37



He respondido una pregunta similar aquí con un ejemplo de cómo usar DialogPreference.

creando una DialogPreference desde XML


1
2018-01-11 19:06