【问题标题】:Changing CheckBoxPreference value to false将 CheckBoxPreference 值更改为 false
【发布时间】:2012-07-28 13:55:10
【问题描述】:

我目前正在做一个 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>

SharedPreferencesActivity:

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

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

【问题讨论】:

标签: android checkbox sharedpreferences preference


【解决方案1】:

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

尝试调用

SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(myContext);

或者查看文件名是什么,在data/data/yourpackage/shared_prefs下查看

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

【讨论】:

  • 好的,我检查了我的值 isPhysicalTheftEnabled 已写入我的 _preferences.xml,我可以编辑该文件中的布尔值吗?
【解决方案2】:

嗯,您在共享偏好设置中添加了“假”,而没有触摸复选框偏好设置视图……如果您在某处存储了引用,那就太好了

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

【讨论】:

  • 无法从 View 转换为 CheckBoxPreference,我收到此错误。
  • 哦,快点,那么被勾选和取消勾选的实际视图是什么?用它替换 CheckBoxPreference 并重试。我的错 :) 请发布它的 onBindView(View view) 方法。
  • 这实际上是一个复选框偏好,由于某种原因不起作用
  • 也许您没有将视图绑定到它,这就是它不起作用的原因?我现在有点瞎猜了。但无论如何,您还需要刷新视图。也可能来自处理程序。
  • 我正在尝试将这段代码放在 onCreate 方法中的按钮 onclicklistener 中,这可能是原因吗?
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多