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