0

Je suis confus au sujet de ce qui se passe dans le code suivant. C'est en train de faire ce que je veux mais je pensais que je devrais faire plus de travail. Dans la méthode onCreate, les cases à cocher conservent leur état coché ou non coché d'une exécution précédente même après que j'ai forcé la fermeture de l'application. Il enregistre leur état même si le message Log "onCreate found" n'est jamais imprimé et que le message "add account" est imprimé et que cbp2.setChecked (false) semble être ignoré.préférence dynamique checkbox puzzle

Que se passe-t-il?


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

}


est ici le haut de mes préférences xml:

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

Répondre

0

Cela dépend vraiment de la façon dont vous avez défini le code XML de préférence. Habituellement, il enregistre le paramètre dans SharedPreferences et, par conséquent, chaque modification est rapidement réécrite dans SharedPrefs et donc persistante.

+0

Ok, merci. J'ai ajouté le début de mon fichier xml de préférences à la question. – lumpynose

+0

Bien que je suis toujours confus quant à pourquoi le débogage "trouvé" n'a pas été imprimé. – lumpynose