【问题标题】:Android - Confirm Dialog when changing the preferenceAndroid - 更改首选项时的确认对话框
【发布时间】:2013-12-15 19:42:44
【问题描述】:

谁能建议我在更改 CheckboxPreference 或 SwitchPrerence 时执行 AlertDialog 以确认更改的方法, 前任。如果我想取消选中首选项,AlertDialog 应该警告他们“你确定要取消选中吗?”加上对话框应该是可定制的,因为我将使用自己的布局。我不想要带有对话框的默认蓝条标题。

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

【问题讨论】:

    标签: android android-alertdialog preference customdialog


    【解决方案1】:

    我设法做到了:

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

    => PreferencesHelper 代码

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

    【讨论】:

      【解决方案2】:

      这样的事情应该可以工作:

            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 上创建它
      • 对不起,我不明白你的问题。
      • 您建议的方式是在活动或任何地方有一个对话框。但是您不能直接将此方法直接实现到首选项类中的 setOnPreferenceClickListener 中。 AlertDialog 在 Preference 类中不可用
      • 我想你想使用 OnPreferenceClickListener。从那里(免责声明 - 我没有使用它),您应该能够防止点击被处理 - 因此,提交首选项更改。我认为,基于其他android api的行为,如果你想消耗点击并防止偏好改变,你应该返回“true”;否则为假。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多