【问题标题】:Close confirmation dialog when user selects negative button in setOnPreferenceChangeListener当用户在 setOnPreferenceChangeListener 中选择否定按钮时关闭确认对话框
【发布时间】:2017-06-15 07:08:17
【问题描述】:

我创建SwitchPreference 用于更改 Android 设置活动中的值。当用户更改SwitchPreference 值时,将调用“setOnPreferenceChangeListener()”函数。

现在,我显示了一个对话框提示,供用户确认此操作。当用户点击正面按钮时,它可以正常工作。

但问题是,每当用户选择否定确认按钮时。

在 Android API 21 中 - 对话框提示正常关闭。

在 Android API 19 中 - 对话框提示重复打开。

switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener(){
    @Override
    public boolean onPreferenceChange(Preference preference, final Object newValue) {
        new EasyMaterialDialog.Builder(getActivity())
                .title("Confirmation")
                .content("Are you sure?")
                .positiveText("Yes")
                .negativeText("No")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        //Works Normally
                    }})
                .onNegative(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    //The problem is here
                    //The switchPreference value changed here again
                    //So once again setOnPreferenceChangeListener is called
                        switchPreference.setChecked(!(Boolean)newValue);
                    }
                })
                .cancelable(false)
                .show();
        return false;
    }
});

当用户单击否定按钮时如何更改 SwitchPreference 的旧值?

【问题讨论】:

    标签: java android listener android-preferences preferencefragment


    【解决方案1】:

    你可以暂时“关闭”你的听众:

    switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, final Object newValue) { final Preference.OnPreferenceChangeListener that = this; new EasyMaterialDialog.Builder(getActivity()) ... .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { switchPreference.setOnPreferenceChangeListener(null); switchPreference.setChecked(!(Boolean) newValue); switchPreference.setOnPreferenceChangeListener(that); } }) .show(); return false; } });

    【讨论】:

    • 我在添加switchPreference.setOnPreferenceChangeListener(OnPreferenceChangeListener.this); 时出错:“android.preference.Preference.OnPreferenceChangeListener”不是封闭类
    • 如果我在对话框中单击“否”按钮,PreferenceChangeListener 将获得空值。提示也会正常关闭。但是下次当我单击 SwitchPreference 时,不会调用侦听器
    猜你喜欢
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多