Как реализовать подтверждение (да/нет) DialogPreference?


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

для примера см. Browser->Setting->Clear Cache.

4 78

4 ответа:

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

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

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

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

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

screenshot

используйте предпочтение намерений если вы используете экран 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();
}}

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

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

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