如何手动处理复选框状态?

时间:2011-07-12 17:41:38

标签: android android-preferences checkboxpreference

我需要手动控制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 个答案:

答案 0 :(得分:4)

如果处理了点击,您应该始终返回true。来自API

public abstract boolean onPreferenceClick (Preference preference)

自:API Level 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; 
}

答案 1 :(得分: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的文档。

请注意,所有这一切都会在UI线程上发生,所以如果您需要执行长时间运行的任何操作,我会将其放在AsyncTaskProgressDialog,以便用户不会沮丧。

答案 2 :(得分:1)

您可以使用它来检查复选框是否已选中

if(buyPref.isChecked())
{ 
     

//做你想做的事

     

}   其他   {   做点别的   }

要设置复选框,

buypref.setChecked(true);

希望它有所帮助!

干杯 尼西