Как обрабатывать статус флажка вручную?

Мне нужно контролировать 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);

Надеюсь, поможет!

Ура Нитин

Другие вопросы по тегам