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はnull値を取得しました。また、プロンプトは正常に終了します。しかし次回SwitchPreferenceをクリックしたときにリスナーは呼び出されません –

関連する問題