我需要手动控制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);
答案 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线程上发生,所以如果您需要执行长时间运行的任何操作,我会将其放在AsyncTask
中ProgressDialog
,以便用户不会沮丧。
答案 2 :(得分:1)
您可以使用它来检查复选框是否已选中
if(buyPref.isChecked())
{
//做你想做的事
} 其他 { 做点别的 }
要设置复选框,
buypref.setChecked(true);
希望它有所帮助!
干杯 尼西