我有一些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()? 有任何想法吗?谢谢!
答案 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();
}