Android - 更改偏好设置时确认对话框

3

有人能给我建议如何在更改CheckboxPreference或SwitchPreference时执行AlertDialog以确认更改吗? 例如,如果我想取消选中偏好设置,AlertDialog应该警告他们,如“确定要取消选中吗?” 此外,对话框应该是可自定义的,因为我将使用自己的布局。 我不想使用默认的Bluestrip标题栏与对话框。

SwitchPreference pref = (SwitchPreference) findPreference("prefkey_use_passcode");
    pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference arg0, Object arg1) {
            DialogPreference dialog = new DialogPreference(getParent());

            return false;
        }
    });
2个回答

5
我用以下方法成功地完成了它:
        final CheckBoxPreference myPref = (CheckBoxPreference) findPreference("myPref");
        if (myPref != null) {
            myPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    if (newValue instanceof Boolean && ((Boolean) newValue) != PreferencesHelper.getMyPref()) {
                        final boolean isEnabled = (Boolean) newValue;
                        if (!isEnabled) {

                            new AlertDialog.Builder(PreferencesActivity.this)
                            .setTitle("Confirm")
                            .setIcon(R.drawable.alert)
                            .setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    // do nothing
                                }
                            })
                            .setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int whichButton) {
                                    // OK has been pressed => force the new value and update the checkbox display
                                    PreferencesHelper.setMyPref(false);
                                    myPref.setChecked(false);
                                }
                            }).create().show();

                            // by default ignore the pref change, which can only be validated when OK is pressed
                            return false;

                        }
                    } 
                    return true;
                }
            });
        }

=> 首选项辅助器代码
public static boolean getMyPref() {
    return getSharedPreferences().getBoolean("myPref", true);
}

public static void setMyPref(boolean newValue) {
    Editor edit = getEditor();
    edit.putBoolean("myPref", newValue);
    edit.apply();   
}

1

像这样应该可以工作:

      AlertDialog.Builder builder = new AlertDialog.Builder (this);
      builder.setMessage (getString (R.string.are_you_sure));
      builder.setNegativeButton (getString(android.R.string.cancel),
                                 new DialogInterface.OnClickListener()
                                 {
                                   @Override
                                   public void onClick (DialogInterface dialog, int which)
                                   {
                                     finish();
                                   }
                                 });
      builder.setPositiveButton (getString(android.R.string.ok),
                                 new DialogInterface.OnClickListener()
                                 {
                                   @Override
                                   public void onClick (DialogInterface dialog, int which)
                                   {
                                     --- do the work to update the preference ---
                                     finish();
                                   }
                                 });
      builder.create().show();
      return;

我知道如何使用AlertDialog,但在Preference中,我该在哪里调用它?而且我无法在setOnPreferenceClickListener上创建它。 - Kirk
抱歉,我不理解你的问题。 - Peri Hartman
你提出的方法是在Activity或其他地方创建一个对话框。但是,你不能直接将此方法实现到Preference类中的setOnPreferenceClickListener中。AlertDialog在Preference类中不可用。 - Kirk
我认为你想使用OnPreferenceClickListener。从那里开始(免责声明-我没有使用过它),你应该能够阻止点击被处理-因此,提交首选项更改。我认为,基于其他Android API的行为,如果你想消耗点击并防止首选项更改,应该返回“true”;否则返回“false”。 - Peri Hartman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接