Напишите кому несложно какой-нибудь рабочий пример кода с сохранением состояния активити и восстановлением состояние при следующем её старте.
Никак не могу понять логики работы методов onSaveInstanceState и onRestoreInstanceState - метод onSaveInstanceState вроде отрабатывает а Bundle - нулевой.
Метод onSaveInstanceState(...) вызывается между onPause() и onStop() и служит для сохранения данных (упаковки их в объект типа Bundle).
Метод onRestoreInstanceState(...) вызывается после onStart() и служит для восстановления данных (распаковки их из объекта типа Bundle). Данный метод вызывается только в том случае, если данные были сохранены (следовательно, проверка на savedInstanceState != null здесь не нужна).
Также, сохраненные данные можно восстановить в методе onCreate(...) (в большинстве кейсов их восстанавливают именно здесь).
Вот пример с восстановлением данных в onCreate(...):
public class MainActivity extends AppCompatActivity {
private static final String VALUE_KEY = "Value";
private int mValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
mValue = savedInstanceState.getInt(VALUE_KEY);
} else {
mValue = 1;
}
Toast.makeText(this, "Value: " + mValue, Toast.LENGTH_SHORT).show();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mValue = 2;
outState.putInt(VALUE_KEY, mValue);
}
}
При запуске приложения отобразится значение 1, далее, например, если повернуть экран, то на экране появится значение 2.
Обратите внимание: если Вы нажмете кнопку Back, а потом откроете приложение, то появится значение 1, то есть сохранение значения не произойдет, так как нажатие на кнопку Back подразумевает под собой закрытие приложения (строго говоря, данные-таки сохранятся, но уже не восстановятся).
Нижеследующий пример демонстрирует восстановление данных с помощью метода onRestoreInstanceState(...):
public class MainActivity extends AppCompatActivity {
private static final String VALUE_KEY = "Value";
private int mValue;
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mValue = savedInstanceState.getInt(VALUE_KEY);
Toast.makeText(this, "Value: " + mValue, Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
mValue = 1;
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mValue = 2;
outState.putInt(VALUE_KEY, mValue);
}
}
При первом запуске Toast не отобразится, так как данные не сохранены и onRestoreInstanceState(...) не вызовется. Далее, при изменении жизненного цикла активити, будет вызываться onRestoreInstanceState(...) и отображаться Toast со значением 2.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости