В настоящее время я разрабатываю приложение, в котором есть меню, а один из параметров в меню – «Настройки», где пользователь может в принципе решить отключить звуки и другие подобные вещи. В настоящее время у меня есть два переключателя в настройках. Вот код 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 отлично работает. Однако, когда я вернусь к своей активности в меню и вернусь к этому действию параметров, состояние переключателей вернется к значениям по умолчанию, являющимся истинными, независимо от того, что пользователь указывает. В любом случае, я могу это исправить?
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); }