私は現在、メニューのあるアプリを開発しています。メニューのオプションの1つは「設定」で、ユーザーは基本的にサウンドなどをオフにするかどうかを決定できます。現在、設定アクティビティに2つのスイッチがあります。以下は、これまでの設定アクティビティのJavaコードです。
import Android.support.v7.app.ActionBarActivity;
public class Options extends ActionBarActivity {
private Switch Ding;
private Switch countdown;
public boolean isDingChecked;
public boolean isCountdownChecked;
public static final String PREFS = "examplePrefs";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
Ding = (Switch) findViewById(R.id.switch1);
Ding.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences examplePrefs = getSharedPreferences(PREFS,0);
Editor editor = examplePrefs.edit();
editor.putBoolean("userMessage", isChecked);
editor.commit();
//System.out.println(examplePrefs.getBoolean("userMessage", isChecked));
isDingChecked = examplePrefs.getBoolean("userMessage", isChecked);
System.out.println(isDingChecked + " is Ding checked");
Ding.setChecked(isDingChecked);
}
});
countdown = (Switch) findViewById(R.id.switch2);
countdown.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// do something, the isChecked will be
// true if the switch is in the On position
isCountdownChecked = isChecked;
}
});
}
}
他のアクティビティでブール値を使用できるので、SharedPreferenceは正常に機能します。ただし、メニューアクティビティに戻り、このオプションアクティビティに戻ると、ユーザーの状態に関係なく、スイッチの状態はデフォルト値のtrueに戻ります。とにかくこれを修正できますか?
Ding.setChecked(isDingChecked)
本当に何もしていないと思います。私は過去にこれに似た質問を投稿したことを知っています。それは、あまり活動がなかったというだけで、かなり長い間この問題に取り組んできました。ありがとう!
このようなものを試してください:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
Ding = (Switch) findViewById(R.id.switch1);
//grab prefs first
final SharedPreferences examplePrefs = getSharedPreferences(PREFS,0);
final Editor editor = examplePrefs.edit();
Ding.setChecked(examplePrefs.getBoolean("your_key", false)); //false default
Ding.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//commit prefs on change
editor.putBoolean("your_key", isChecked);
editor.commit();
System.out.println(isDingChecked + " is Ding checked");
}
});
スイッチのsetChecked(value)
メソッドは完全に正常に動作しますが、不要なonCheckedChanged(...)
メソッド内で呼び出します。
そのため、Switch
を最新の値に設定するには、プリファレンスをロードし、setOnCheckedChangeListener
リスナーの外部でチェック状態を設定する必要があります。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
// your current code
//load and set preferences
SharedPreferences examplePrefs = getSharedPreferences(PREFS,0);
isDingChecked = examplePrefs.getBoolean("userMessage", isChecked);
Ding.setChecked(isDingChecked);
}