Как сохранить прежние данные об активности Android видимыми после возврата с помощью кнопки «Назад» (<-) на панели инструментов? - PullRequest
0 голосов
/ 28 февраля 2020

Настройка сценария : Основное действие имеет список просмотра Recycler, который заполняет список элементов при выборе topi c. При щелчке элемента в списке пользователь переходит к операции «Подробности», которая предоставляет подробные сведения c об этих топиках c (похоже на приложение заметок, я думаю).

Моя проблема : Когда я щелкаю стрелку назад (<-) слева от панели инструментов в подробном действии, чтобы вернуться к списку элементов в главном действии, все поля и список элементов на главном становятся пустыми. Упражнение. </p>

Однако, если я использую кнопку возврата устройства, а не стрелку назад на панели инструментов, когда я вернусь к основному действию, все подробности все еще остаются для выбранной топи c. Это также верно, если я запускаю в режиме отладки и перебираю код onOptionsItemSelected с fini sh () , поля и список Main Activity по-прежнему заполнены. Однако при простом запуске приложения (без отладки или использования кнопки возврата устройства) поля «Основной вид деятельности» и список при возвращении остаются пустыми.

Что я пробовал : при отладке следующий код работает, но я не уверен, что это правильно. Я попытался в том числе метод onBackPressed. Я также не уверен, как вы определяете эту стрелку «Назад» на панели инструментов, чтобы правильно вызывать ее.

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    finish();
    return super.onOptionsItemSelected(item);
}

Я также пытался это сделать:

@Override
public void onBackPressed() {
    Intent i = new Intent(this, MainActivity.class);
    startActivity(i);
    //super.onBackPressed();
}

1 Ответ

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

По умолчанию, когда вы возвращаетесь с кнопкой вверх (стрелка назад на панели инструментов), каркас отправляет намерение MainActivity в фоновом режиме. И по умолчанию это создает новый экземпляр вашей MainActivity. Возврат с кнопкой «Назад» внизу, с другой стороны, вытаскивает ваш DetailsActivity из backstack и показывает существующий экземпляр MainActivity, но не создает новый экземпляр. Это является причиной различного поведения.

Для решения вы можете добавить:

android:launchMode="singleTop"

к вашему манифесту в тегах вашей MainActivity. В режиме запуска singleTop новый экземпляр не будет создаваться каждый раз, он будет выводить существующий экземпляр на передний план.

Другое возможное решение состоит в том, чтобы заставить вашу кнопку вверх работать как кнопка возврата в вашей функции DetailsActivity:

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if(item.getId() == android.R.id.home){
       onBackPressed()
    }
    return super.onOptionsItemSelected(item);
}
...