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