动态偏好复选框谜题



我对以下代码中发生的事情感到困惑。它实际上是在做我想做的事,但我想我必须做更多的工作。在onCreate方法中,即使在我强制退出应用程序后,复选框也会保留上一次运行时的已选中或未选中状态。它正在保存它们的状态,即使从未打印日志消息"onCreate found",打印"adding account"消息,并且cbp2.setChecked(false)似乎被忽略。

怎么回事?


public class SettingsActivity extends PreferenceActivity {
private final static String LOGTAG = "SettingsActivity";
@Override
@SuppressWarnings("deprecation")
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Load preference data from XML
    this.addPreferencesFromResource(R.xml.preferences_settings);
    Set<String> accounts = new HashSet<String>();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
        accounts = Accounts.getAccounts(this);
    }
    final PreferenceCategory cat = (PreferenceCategory) this
            .findPreference("key_accounts");
    for (String account : accounts) {
        final CheckBoxPreference cbp = (CheckBoxPreference) this
                .findPreference("key_" + account);
        if (cbp != null) {
            Log.d(SettingsActivity.LOGTAG, "onCreate found: " + account
                    + (cbp.isChecked() ? ", checked" : ""));
            continue;
        }
        Log.d(SettingsActivity.LOGTAG, "adding account " + account);
        final CheckBoxPreference cbp2 = new CheckBoxPreference(this);
        // make sure each key is unique
        cbp2.setKey("key_" + account);
        cbp2.setTitle(account);
        cbp2.setChecked(false);
        cat.addPreference(cbp2);
    }
}

}


以下是我的首选项xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
    android:key = "key_accounts"
    android:title = "@string/title_accounts">
</PreferenceCategory>

这实际上取决于您如何定义首选项XML。通常它会将设置保存在SharedPreferences中,因此每次更改都会立即写回SharedPrefs,因此是持久的。

相关内容

  • 没有找到相关文章

最新更新