Android-One clicklistener для многих CheckBoxPreference

У меня есть несколько элементов CheckBoxPreference, для которых я хотел бы использовать один onClickListener для всех CheckBoxPreference на моей странице. Вот что я пытаюсь сделать:

    CheckBoxPreference checkboxPref = (CheckBoxPreference)getPreferenceManager().findPreference("preference1");
    CheckBoxPreference checkboxPref1 = (CheckBoxPreference)getPreferenceManager().findPreference("preference2");
    checkboxPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            CheckBoxPreference pref = (CheckBoxPreference) findPreference("preference1");

            if (pref.isChecked())
            {
                pref.setChecked(false);
                dialog.show();
            }else if (!pref.isChecked())
            {
                pref.setChecked(true);
                dialog.show();
            }
            return false;
        }
    });
}

Как я могу сделать это onPreferenceClick() для checkboxPref1? Есть идеи? Спасибо!

3 ответа

Решение
OnePreferenceClickListener listener = new Preference.OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference preference) {
        CheckBoxPreference pref = (CheckBoxPreference) findPreference("preference1");
            pref.setChecked(!pref.isChecked());
            dialog.show();
        return false;
    }
});
checkboxPref.setOnPreferenceClickListener(listener);
checkboxPref1.setOnPreferenceClickListener(listener);

В качестве альтернативы вы можете сделать так, чтобы ваш класс реализовал интерфейс, а затем просто передать это обоим предпочтениям флажка.

Чтобы добавить в ответ Bens, рекомендуется создать прослушиватель как private final (или же public final если к нему нужно получить доступ в другом месте), так как он не изменится:

 private final OnePreferenceClickListener listener = new Preference.OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference preference) {
        CheckBoxPreference pref = (CheckBoxPreference) findPreference("preference1");

        if (pref.isChecked()) {
           pref.setChecked(false);
           dialog.show();
        }else if (!pref.isChecked()){
            pref.setChecked(true);
            dialog.show();
        }
        return false;
   }
});

Если сам класс довольно прост, то вы можете добавить implements Preference.OnPreferenceClickListener к вашему классу, который заставит вас добавить Override:

    @Override
    public boolean onPreferenceClick(Preference preference) {
        CheckBoxPreference pref = (CheckBoxPreference) findPreference("preference1");

        if (pref.isChecked()) {
           pref.setChecked(false);
           dialog.show();
        }else if (!pref.isChecked()){
            pref.setChecked(true);
            dialog.show();
        }
        return false;
   }
        @Override
        public boolean onPreferenceClick(Preference preference) {
            // TODO Auto-generated method stub
            CheckBoxPreference pref = (CheckBoxPreference) findPreference("preference1");
            if (pref.isChecked())
            {
                pref.setChecked(true);
            }else if (!pref.isChecked())
            {
                pref.setChecked(false);
            }
            return pref.isChecked();
        }
Другие вопросы по тегам