У меня есть простое приложение для Android - словарь. Я использую ListView для заполнения словарных слов на главном экране глоссария. Если слово тронуто, новое намерение запускает словарный экран, который показывает слово и определение. Проблема в том, что если я нажму "назад", чтобы перейти с экрана слова обратно в глоссарий, ListView не заполняется.
Я использую onStop(), чтобы закрыть курсор базы данных при перемещении с экрана глоссария и onRestart(), чтобы открыть курсор и (я думал), чтобы заполнить ListView. Кажется, он не работает.
Одна важная вещь, если после перехода на экран глоссария с экрана слова (и получения черного экрана без ListView) я изменяю ориентацию приложения, которое заполняет ListView.
Я думал, что нажатие "назад" всегда будет вызывать onRestart(). Почему нажимать назад НЕ приводит к тому, что ListView заполняется, но изменение ориентации происходит?
Спасибо
Вместо этого используйте onPause и onResume. Изменение ориентации приводит к тому, что ваша деятельность будет уничтожена и перезапущена, переход к другому действию приведет к приостановке активности. Когда вы нажмете назад, оно возобновится.
Ознакомьтесь с этим обзором - http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
У вас такая же проблема, но моя может немного отличаться от вашей.
Это то, что сработало для меня в основном действии (тот, который имеет ListView, который не репопультируется на спине), я добавил следующее:
@Override
protected void onRestart() {
Intent intent = getIntent();
finish();
startActivity(intent);
super.onRestart();
}
Вероятно, взломан и неэффективен, но работает для моего маленького приложения!
Edit: Здесь лучший метод, который работал со мной тоже:
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
Примечание. Я думаю, причина, по которой это происходит с моим приложением, заключается в том, что я запускаю новое действие из диалогового окна (и ему нужно было установить флаг Intent.FLAG_ACTIVITY_NEW_TASK
). Но я все еще участвую и могу ошибаться.