Как реализовать подтверждение (да / нет) DialogPreference? - PullRequest
91 голосов
/ 26 февраля 2011

Как реализовать предпочтение, которое отображает простой диалог подтверждения «да / нет»?

Например, см. Browser->Setting->Clear Cache.

Ответы [ 4 ]

261 голосов
/ 26 февраля 2011

Это простое диалоговое окно с предупреждением , Федерико дал вам сайт, где вы можете искать вещи.

Вот краткий пример того, как можно создать диалоговое окно предупреждения.

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();
9 голосов
/ 04 января 2013

Android поставляется со встроенным классом YesNoPreference, который делает именно то, что вам нужно (диалоговое окно подтверждения с опциями yes и no). Смотри официальный исходный код здесь .

К сожалению, он находится в пакете com.android.internal.preference, что означает, что он является частью частных API-интерфейсов Android, и вы не можете получить к нему доступ из своего приложения (частные классы API могут быть изменены без предварительного уведомления, поэтому причина, по которой Google не делает этого) разрешить вам доступ к ним).

Решение: просто заново создайте класс в пакете вашего приложения, скопировав / вставив официальный исходный код по предоставленной мной ссылке. Я пробовал это, и он отлично работает (нет причин, почему это не должно).

Затем вы можете добавить его в свой preferences.xml, как и любые другие предпочтения. Пример:

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

Что выглядит так:

screenshot

3 голосов
/ 13 сентября 2012

Используйте Intent Preference, если вы используете xml-экран preference или вы используете свой пользовательский экран, тогда код будет выглядеть так:

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

А затем создайте класс деятельности, как показано ниже. Поскольку разные люди используют разные подходы, вы можете использовать любой подход, который вам нравится, это всего лишь пример.

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

Как уже было сказано, есть несколько способов сделать это. это один из способов выполнения вашей задачи, примите ответ, если считаете, что получили то, что хотели.

1 голос
/ 11 января 2012

Я ответил на аналогичный вопрос здесь с примером того, как использовать DialogPreference.

создание DialogPreference из XML

...