私は奇妙な問題があります。 1つのアクティビティでチェックボックスフィールドのリストがある場合、チェックボックスの状態は共有されているかどうかによって異なりますが、時には時にはうまくいかない場合もあります(チェックボックスをチェックして前のアクティビティに戻って、 sharedPrefrencesの値は変更されません)。私はそれが起こったと思った、私はスレッドに節約ロジックを置くが、同じ問題を抱えたので、あまりにも速く活動を変更しています。sharedPreferencesのbooleanが必ずしもcorreclyを保存しない場合
public final static String PREFERENCES_NAME = "USER_PREFERENCES";
public final static String PLAY_REQUIRED = "PLAY_REQUIRED";
sharedPreferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE);
recordCheckBox=(CheckBox)findViewById(R.id.recordRequiredCheckBox);
recordCheckBox.setChecked(sharedPreferences.getBoolean(PLAY_REQUIRED,true));
findViewById(R.id.playRequiredItem).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor preferencesEditor = sharedPreferences.edit();
if(recordCheckBox.isChecked()) {
recordCheckBox.setChecked(false);
preferencesEditor.putBoolean(PLAY_REQUIRED, false).apply();
preferencesEditor.commit();
Log.i("kamil","AfterSetFalseCheckBox :: "+ sharedPreferences.getBoolean(PLAY_REQUIRED,true));
}
else {
recordCheckBox.setChecked(true);
preferencesEditor.putBoolean(PLAY_REQUIRED, true).apply();
preferencesEditor.commit();
Log.i("kamil","AfterSetTrueCheckBox :: "+ sharedPreferences.getBoolean(PLAY_REQUIRED,true));
}
}
});
削除:値を取得するには
を。 apply()。 apply()は、SPの非同期保存に使用されます。 –
AsyncTaskを削除し、直接PreferencesEditor.putBooleanを使用します(PLAY_REQUIRED、check).apply(); preferencesEditor.commit(); –
'sharedPreferences = getApplicationContext()。getSharedPreferences(PREFERENCES_NAME、Activity.MODE_PRIVATE);' –