Как обрабатывать статус флажка вручную? - PullRequest
2 голосов
/ 12 июля 2011

Мне нужно управлять 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 ]

4 голосов
/ 12 июля 2011

Вы должны всегда возвращать 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; 
}
3 голосов
/ 12 июля 2011

Я думаю, вы хотите что-то вроде этого:

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, чтобы пользователь не разочаровался.

1 голос
/ 12 июля 2011

Вы можете использовать это, чтобы проверить, установлены ли флажки

if(buyPref.isChecked())
{ 

// Делайте что хотите

} else {Делайте что-то еще}

Чтобы установить флажок,

buypref.setChecked(true);

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

Ура Nithin

...