Android-多个 CheckBoxPreference 的一个点击监听器

Android-One clicklistener for many CheckBoxPreference

我有一些 CheckBoxPreference 元素,我想为其页面中的所有 CheckBoxPreference 使用一个 onClickListener。这是我正在尝试做的事情:

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

如何为 checkboxPref1 执行此 onPreferenceClick()? 有任何想法吗?谢谢!

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);

或者,您可以让 class 实现接口,然后将其传递给两个复选框首选项。

要添加到 Bens Answer,最好将监听器创建为 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;
   }
});

如果 Class 本身非常简单,那么您可以将 implements Preference.OnPreferenceClickListener 添加到您的 class 中,这将强制您添加 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();
        }