0

我目前正在做一个 Android 安全应用程序,并且CheckboxPreference在满足某些条件后我试图取消选中。所以我试图通过这样做来取消选中复选框,默认情况下CheckBoxPreference它实际上false是未选中的。

喜好:

<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>

SharedPreferences里面Activity

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

CheckBoxPreference即使我这样做了,也不会取消。知道可能是什么问题吗?

4

2 回答 2

1

我真的不明白你试图完成什么,但我猜你得到了错误的 SharedPrefence 文件。

试着打电话

SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(myContext);

或检查文件名的名称,查看 data/data/yourpackage/shared_prefs

您写入一个名为“isPhysicalTheftEnabled”的首选项文件,我猜这不一样。

于 2012-07-30T21:02:34.493 回答
0

嗯,您在共享首选项中添加了一个“错误”,而没有触摸复选框首选项视图......如果您在某处存储了参考,那就太好了

  CheckBoxPreference cbp = (CheckBoxPreference) findViewById(R.id.isPhysicalTheftEnabled);
  SharedPreferences sp = getSharedPreferences("isPhysicalTheftEnabled", MODE_WORLD_READABLE);
  SharedPreferences.Editor ed = sp.edit();
  ed.putBoolean("isPhysicalTheftEnabled", cbp.getChecked());  //puts the real value in here
  ed.commit();
  cbp.setChecked(false);    //turn it off as you intended
  cbp.postInvalidate();    //refresh the view

setChecked() 可能必须从 Handler 或通过 runOnUIThread() 调用

于 2012-07-30T20:48:42.723 回答