CheckboxPreference不取消选中或转为false

时间:2012-07-30 11:51:43

标签: android checkbox preference

我目前正在做一个Android安全应用程序,并且我试图在某些条件完成后取消选中CheckboxPreferences,所以我试图通过执行此操作取消选中该复选框

的活动:

            SharedPreferences sp = getSharedPreferences("isPhysicalTheftEnabled", MODE_WORLD_READABLE);
            SharedPreferences.Editor ed = sp.edit();
            ed.putBoolean("isPhysicalTheftEnabled", false);
            ed.commit();

的preferences.xml

<CheckBoxPreference
            android:id="@+id/isPhysicalTheftEnabled"
            android:key="isPhysicalTheftEnabled"
            android:title="Enable Physical Theft Protection"
            android:summary="Select to enable the Physical Theft Protection"
            android:defaultValue="false"/>
<Preference android:key="physicaltheft" android:title="Set Physical Theft Protection Password" android:dependency="isPhysicalTheftEnabled"></Preference>

但即使我执行ed.commit()之后,CheckBoxPreference仍未取消选中;知道为什么会这样吗?

3 个答案:

答案 0 :(得分:0)

首先,打开名为“isPhysicalTheftEnabled”的首选项文件,然后将false写入此文件。您不更新用户可见的设置,只将名为'isPhysicalTheftEnabled'的值保存到具有相同名称的文件。要更新您的布局,您需要在PreferenceActivity或Fragment中实现onPreferenceChange,例如

public boolean onPreferenceChange(Preference preference, Object newValue) {
    Toast.makeText( getApplicationContext(), "NewValue: " + newValue.toString(), Toast.LENGTH_SHORT).show();    
    return true;
}

答案 1 :(得分:0)

你应该使用

        SharedPreferences sp = getDefaultSharedPreferences(this);

        SharedPreferences sp = getDefaultSharedPreferences(getActivity());

答案 2 :(得分:0)

您可以执行以下操作:

cbxxx.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                Editor edit = PreferenceManager.getDefaultSharedPreferences(
                        youractivity.this).edit();
                if (isChecked) {
                    edit.putBoolean("isPhysicalTheftEnabled", true);
                } else {
                    edit.putBoolean("isPhysicalTheftEnabled", false);
                }
                edit.commit();
            }
        });

如果你想获得上述价值:

SharedPreferences prefs = preferenceManager.getDefaultSharedPreferences(getApplicationContext());
if(prefs.getBoolean("isPhysicalTheftEnabled", false)){
}