2

我需要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);
4

3 回答 3

4

如果单击已处理,您应该始终返回 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; 
}
于 2011-07-12T18:42:12.937 回答
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 线程上,因此如果您需要执行任何长时间运行的操作,我会将其放入AsyncTaskwith aProgressDialog中,这样用户就不会感到沮丧。

于 2011-07-12T19:24:06.330 回答
1

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

if(buyPref.isChecked())
{ 

//做你想做的

} 其他 { 做其他事情 }

要设置复选框,

buypref.setChecked(true);

希望能帮助到你!

干杯尼廷

于 2011-07-12T17:47:59.600 回答