Как заставить переключатели не переключаться при переключении активности? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть приложение android с 2 сценами. Активность и настройки. Когда я go перехожу из основной активности в настройки активности и меняю радиокнопку, а go возвращается в основную активность и затем снова возвращаюсь, кнопка возвращается к значению по умолчанию. Это потому, что он всегда идет к методу oncreate. Как я должен поместить / написать Intent, чтобы радиокнопки не вернулись к значениям go по умолчанию?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Вы должны сохранить состояние переключателей, если оно изменилось в некотором постоянстве. Для настроек SharedPreferences - оптимальный выбор. Итак,

  1. Создать коллекцию возможных RadioButton с в группе (после оператора setContent в методе onCreate):
RadioGroup rGroup = findViewById(R.id.radioGroup1);

List<RadioButton> buttons = new ArrayList();
buttons.add(rGroup.findViewById(R.id.radioButton1);
buttons.add(rGroup.findViewById(R.id.radioButton2);
// ...
}
После изменения состояния (например, в OnCheckedChangeListener из RadioGroup) сохраните его в SharedPreferences:
// find RadioButton
RadioGroup rGroup = findViewById(R.id.radioGroup1);
RadioButton checkedRadioButton = rGroup.findViewById(rGroup.getCheckedRadioButtonId());

// define selected option value
int selectedOption = 0;
for (int i = 0; i < buttons.size(); i++) {
  if (checkedRadioButton.getId() == buttons.get(i).getId()) {
    selectedOption = i;
    break;
  }
}

// write state to SP
getSharedPreferences("my_settings", Context.MODE_PRIVATE).edit().putInt("sel_option", selectedOption).apply()
В операции настройки onCreate: прочитайте ранее сохраненное состояние и обновите пользовательский интерфейс соответственно:
int option = getSharedPreferences("my_settings", Context.MODE_PRIVATE).getInt("sel_option", 0);

// set checked for the specific button
buttons.get(option).setChecked(true);

1 голос
/ 15 февраля 2020

Вы пытались использовать пару onSaveInstanceState и onRestoreInstanceState? Вы можете сохранить состояние вашего radioButton, чтобы восстановить его позже, когда приложение перезагрузит вашу страницу.

Вот несколько полезных ссылок на оба метода с официального сайта разработчиков Android. https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState (android .os.Bundle) https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState (android .os.Bundle)

...