适用于许多CheckBoxPreference的Android-One clicklistener

时间:2015-02-25 14:11:33

标签: android onclick onclicklistener 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()? 有任何想法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

要添加到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;
   }
});

如果Class本身非常简单,那么您可以将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;
   }

答案 2 :(得分:-1)

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