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時,監聽器不會被調用 –

相關問題