1

我创建SwitchPreference以更改Android设置活动中的值。当用户更改SwitchPreference值时,将调用“setOnPreferenceChangeListener()”函数。当用户在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的旧值?

回答

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

我同时加入'switchPreference.setOnPreferenceChangeListener(OnPreferenceChangeListener.this)一个错误;'错误: 'android.preference.Preference.OnPreferenceChangeListener'不是封闭类 –

+0

@JegadeesanS,已更新。 – azizbekian

+0

如果在对话框中单击“否”按钮,PreferenceChangeListener将获得空值。此提示正常关闭。但下次当我点击SwitchPreference时,监听器不会被调用 –

相关问题