Как обрабатывать статус флажка вручную?
Мне нужно контролировать CheckBoxPreference
вручную; Я должен проверить условие в моих собственных данных, чтобы определить, можно ли установить предпочтение или нет.
Как мне это сделать? Мой текущий код выглядит следующим образом, но, похоже, он не работает.
CheckBoxPreference buyPref = (CheckBoxPreference) findPreference("pref_billing_buy");
buyPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (something) {
return true; // checkbox should be checked
} else {
return false; // checkbox should be unchecked
}
Должен ли я всегда return false
а затем использовать
buyPref.setChecked(true);
3 ответа
Я думаю, что вы хотите что-то вроде этого:
final CheckBoxPreference buyPref = (CheckBoxPreference) findPreference("logs");
buyPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(final Preference preference,
final Object newValue)
{
boolean condition = false;
// set condition true or false here according to your needs.
buyPref.setChecked(condition);
Editor edit = preference.getEditor();
edit.putBoolean("pref_billing_buy", condition);
edit.commit();
return false;
}
});
Вы хотите всегда возвращать false из этого, чтобы Android не пытался записать само предпочтение. Смотрите документацию для OnPreferenceChangeListener
для получения дополнительной информации.
Обратите внимание, что все это будет происходить в потоке пользовательского интерфейса, поэтому, если вам нужно сделать что-то длительное, я бы бросил это в AsyncTask
с ProgressDialog
так что пользователь не расстраивается.
Вы должны всегда возвращать true, если клик был обработан. Из API:
public abstract boolean onPreferenceClick (Preference preference)
С тех пор: API Уровень 1
Вызывается при нажатии на Предпочтение.
параметры
preference
- Предпочтение, которое было нажато.
Возвращает
True
- если клик был обработан.
Итак, ваш код должен читать:
CheckBoxPreference buyPref = (CheckBoxPreference) findPreference("pref_billing_buy");
buyPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
if (buyPref.isChecked()) {
// checkbox is checked, do something
} else {
// checkbox not checked, do something else
}
return true;
}
Менеджер предпочтений должен обработать, проверен ли элемент или нет, но если вы хотите сделать это самостоятельно:
CheckBoxPreference buyPref = (CheckBoxPreference) findPreference("pref_billing_buy");
buyPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
// this will toggle the checkbox
buyPref.setChecked(!buyPref.isChecked());
return true;
}
Вы можете использовать это, чтобы проверить, установлены ли флажки или нет
if(buyPref.isChecked())
{
//Делай что хочешь
} else {Сделай что-нибудь еще}
Чтобы установить флажок,
buypref.setChecked(true);
Надеюсь, поможет!
Ура Нитин