Android ListView не (повторно) заполняется на «назад»

1

У меня есть простое приложение для Android - словарь. Я использую ListView для заполнения словарных слов на главном экране глоссария. Если слово тронуто, новое намерение запускает словарный экран, который показывает слово и определение. Проблема в том, что если я нажму "назад", чтобы перейти с экрана слова обратно в глоссарий, ListView не заполняется.

Я использую onStop(), чтобы закрыть курсор базы данных при перемещении с экрана глоссария и onRestart(), чтобы открыть курсор и (я думал), чтобы заполнить ListView. Кажется, он не работает.

Одна важная вещь, если после перехода на экран глоссария с экрана слова (и получения черного экрана без ListView) я изменяю ориентацию приложения, которое заполняет ListView.

Я думал, что нажатие "назад" всегда будет вызывать onRestart(). Почему нажимать назад НЕ приводит к тому, что ListView заполняется, но изменение ориентации происходит?

Спасибо

Теги:

2 ответа

3

Вместо этого используйте onPause и onResume. Изменение ориентации приводит к тому, что ваша деятельность будет уничтожена и перезапущена, переход к другому действию приведет к приостановке активности. Когда вы нажмете назад, оно возобновится.

Ознакомьтесь с этим обзором - http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

  • 0
    Хорошо спасибо. Я прочитал документацию по жизненному циклу активности - думаю, я изменил видимое время жизни и время переднего плана.
0

У вас такая же проблема, но моя может немного отличаться от вашей.

Это то, что сработало для меня в основном действии (тот, который имеет 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). Но я все еще участвую и могу ошибаться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню