Як здійснити підтвердження (так / ні) DialogPreference?


Відповіді:


292

Це простий діалог попередження , Федеріко дав вам сайт, де можна переглянути речі.

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

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
Я знаю, як створити діалог, але мій питання про налаштування.
sh1ng

1
Ваше запитання щодо переваг? Добре. Подивіться тут: kaloer.com/android-preferences
Maaalte

1
Я вже читав це джерело. Я можу створити користувальницьку налаштування, передплачену на OnClick, і обробляти її, але чи це найпростіший спосіб?
sh1ng

Я думаю, що так, принаймні я не знаю іншого способу, який легше.
Мааалте,

1
використовувати import android.support.v7.app.AlertDialog; для кращого погляду без теми
majurageerthan

9

Android поставляється із вбудованим класом YesNoPreference, який робить саме те, що ви хочете (підтвердження діалогового вікна з опціями "так" і "немає"). Офіційний вихідний код дивіться тут .

На жаль, він знаходиться в 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" />

Як виглядає так:

скріншот


1
Чудове рішення! Але є проблема з одним із конструкторів цього класу! Він посилається на ресурс attr (com.android.internal.R.attr.yesNoPreferenceStyle)! Що неможливо вирішити. Що таке вирішення? Чи потрібно створити його у власному проекті ?!
reubenjohn

3

Використовуйте налаштування намірів, якщо ви використовуєте xml-екран налаштування або ви користуєтеся власним екраном, тоді код буде, як показано нижче

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

Як було сказано раніше, існує ряд способів зробити це. це один із способів виконувати своє завдання, будь ласка, прийміть відповідь, якщо відчуваєте, що отримали це, що хотіли.


Дякую! Це майже саме те, що мені було потрібно для мого додатка, оскільки я запускаю діалогове вікно з сервісу, і в моєму випадку мені потрібна діяльність для розміщення діалогового вікна.
Ральф Рітох

Любіть це. ІМХО багатослівний, але схвальний і правильний спосіб
Іван
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.