【问题标题】:Updating checkbox on PreferenceActivity更新 PreferenceActivity 上的复选框
【发布时间】:2012-09-21 21:07:00
【问题描述】:

如何更新我的 PreferenceActivity?

我在 SharedPreferences 中保存了我的 CheckBox 在活动中的值(在这种情况下,为真)。即使我参加其他活动,我也可以看到这是真的。但是,当我转到我的 PreferenceActivity 时,未选中该复选框,它是错误的。所以我想知道的是,如何在我的 PreferenceActivity 中加载我的 SharedPreferences,以及如何更新 CheckBox(加载值,如果为真,将 CheckBox 设置为选中状态)。

我应该这样加载吗?

Shared Preferences SP = getSharedPreferences(DATA, MODE_PRIVATE);
fw = SP.getBoolean("fw", false);

但是,由于无法使用 findViewById,如何设置 CheckBox 为真或假?

编辑:

我保存 CheckBox 值的活动:

Editor edit = SP.edit();
edit.putBoolean("fw", fwbt.isChecked());
edit.commit();

我的偏好xml文件:

<CheckBoxPreference
    android:title="CheckBox FW"
    android:key="fw"
    android:summary="Estado do CheckBox" />

我的偏好活动:

public class Prefs extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
        //Don't know what to do here...
    }
}

【问题讨论】:

    标签: android


    【解决方案1】:

    你需要创建一个Editor来修改SharedPreferences

    示例

    getSharedPreferences(DATA, MODE_PRIVATE).edit().putBoolean("fw", true).commit();
    

    更新

    你也需要在Activity中定义使用的SharedPreferences

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getPreferenceManager().setSharedPreferencesName(DATA);
        addPreferencesFromResource(R.xml.prefs);
    }
    

    【讨论】:

    • 它没有用。我想我可能表达得很糟糕。我在 SharedPreferences 中保存了我的 CheckBox 在活动中的值(在这种情况下,为真)。即使我参加其他活动,我也可以看到这是真的。但是,当我转到我的 PreferenceActivity 时,未选中该复选框,它是错误的。所以我想知道的是,如何在我的 PreferenceActivity 中加载我的 SharedPreferences,以及如何更新 CheckBox(加载值,如果为真,将 CheckBox 设置为选中状态)。
    • 您是否正在加载包含PreferenceScreenaddPreferencesFromResource(R.xml.pref_classic_appearance) 的XML 文件,然后CheckBoxPreference 的状态与存储到DATA 的状态不匹配?您是否在该配置文件中为 CheckBoxPreference 定义了密钥“fw”?
    • 我已经用我的部分代码编辑了我的帖子。这是同一个键,我打电话给addPreferencesFromResource(R.xml.mypreferencexmlfile);
    【解决方案2】:

    我以前没有使用过 PreferenceActivity,但我认为您只需要像任何其他活动一样实现它。

    public class PreferenceWithHeaders extends PreferenceActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            CheckBox cb = (CheckBox)this.findViewById(IDOFBUTTON);
            ...  do whatever on checkbox
    
        }
    

    【讨论】:

    • 问题是我不能给 CheckBoxPreference 一个 id。
    【解决方案3】:

    我找不到解决办法,所以我放弃了。我刚刚创建了一个自定义首选项,它更容易。

    无论如何,我稍后会继续寻找解决方案。

    【讨论】:

      【解决方案4】:

      你搞砸了 - PreferenceActivity 从SharedPreferences 写入/读取。所以在你的活动中做

      Shared Preferences SP = PreferenceManager.getDefaultSharedPreferences(this);
      Editor edit = SP.edit();
      edit.putBoolean("fw", fwbt.isChecked());
      edit.commit();
      

      并且更改应该存在于您的 PreferenceActivity 中。

      还有:

      SP.edit().putBoolean("fw", fwbt.isChecked()).commit();
      

      会的

      【讨论】:

        猜你喜欢
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多