0

我很困惑以下代码中发生了什么。它实际上正在做我想做的事,但我认为我必须做更多的工作。在onCreate方法中,即使在强制退出应用程序后,复选框仍保留上次运行时的选中状态或未选中状态。即使日志消息“onCreate found”从未打印,并且“添加帐户”消息被打印,并且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> 

回答

0

这真的取决于你如何定义的偏好XML。通常它会将设置保存在SharedPreferences中,因此每次更改都会立即写回到SharedPrefs,因此是持久性的。

+0

好的,谢谢。我在问题中添加了我的首选项xml文件的开始。 – lumpynose 2013-02-15 20:09:50

+0

虽然我仍然困惑,为什么“找到”调试没有打印。 – lumpynose 2013-02-15 20:15:16