0

我有一些 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;
        }
    });
}

我怎样才能使这个 onPreferenceClick() 为 checkboxPref1 执行?有任何想法吗?谢谢!

4

3 回答 3

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

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

于 2015-02-25T14:18:55.363 回答
0

要添加到 Bens Answer,最好将 Listener 创建为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
    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;
   }
于 2015-02-25T14:30:17.653 回答
-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();
        }
于 2017-04-24T03:34:46.753 回答