Java 当用户在setOnPreferenceChangeListener中选择负按钮时,关闭确认对话框

Java 当用户在setOnPreferenceChangeListener中选择负按钮时,关闭确认对话框,java,android,listener,android-preferences,preferencefragment,Java,Android,Listener,Android Preferences,Preferencefragment,我创建SwitchPreference,用于在Android设置活动中更改值。当用户更改SwitchPreference值时,将调用“setOnPreferenceChangeListener()”函数 现在,我显示了一个对话框提示用户确认此操作。当用户点击肯定按钮时,它工作正常 但问题是,每当用户选择否定确认按钮时 在Android API 21中,对话框提示正常关闭 在Android API 19中,对话框提示反复打开 switchPreference.setOnPreferenceChan

我创建
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的旧值?

您可以暂时“关闭”侦听器:


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时,侦听器没有被调用