【问题标题】:CheckboxPreference not unchecking or going to falseCheckboxPreference 未取消选中或变为 false
【发布时间】:2012-07-30 11:51:43
【问题描述】:

我目前正在做一个 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 也不会被取消选中;知道为什么会这样吗?

【问题讨论】:

    标签: android checkbox preference


    【解决方案1】:

    首先,您打开名为“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;
    }
    

    【讨论】:

    • 不,默认情况下它是假的,所以我会启用它,我希望它在我做一些功能后再次为假
    • 那么你想要的是:在有人稍后再次启动它之后将设置从文件恢复到布局?
    • 不,我只是想在执行某些函数后取消选中 CheckboxPreference 为 false
    【解决方案2】:

    你应该使用

            SharedPreferences sp = getDefaultSharedPreferences(this);
    

            SharedPreferences sp = getDefaultSharedPreferences(getActivity());
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      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)){
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-28
        • 2013-02-09
        • 2013-05-26
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        相关资源
        最近更新 更多