0

次のコードで何が起こっているのか混乱しています。それは実際に私がやりたいことをやっていますが、もっと仕事をしなければならないと思っていました。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>
4

1 に答える 1

0

これは、実際には、設定XMLをどのように定義したかによって異なります。通常、設定はSharedPreferencesに保存されるため、すべての変更は即座にSharedPrefsに書き戻されるため、永続的です。

于 2013-02-15T19:59:13.557 に答える