Ваша главная проблема в том, что ваш метод показа "экранов" нетрадиционен.В отличие от обычных подходов использования Деятельностей или Фрагментов, вы просто переключаете Видимости, у которых нет встроенной истории для того, что было показано.
Итак, ваше единственное решение для этого подхода - создать собственный кэш того, что было показано.
Это легко сделать с любым типом данных, например List
.Для этого ответа я буду использовать List
в качестве примера.
Итак, сначала создайте экземпляр List
для хранения истории ваших экранов внутри Activity
:
List<Integer> listOfScreens = new ArrayList<Integer>();
Далее, обязательно добавьте в этот список, когдаВы переключаете экраны:
listOfScreens.add(screenId);
switchToScreen(screenId);
Таким образом, вы добавите новый экран в список, а затем переключитесь на нужный экран.
Наконец, в коде «Навигация вверх» и onBackPressed()
просто удалите последний экран в списке и переключитесь снова.
@Override
public void onBackPressed() {
listOfScreens.remove(listOfScreens.size()-1);
switchToScreen(listOfScreens.get(listOfScreens.size()-1));
}
Вы удалите последний элемент в списке, который является текущим экраном, а затем переключите видимость обратно на предыдущий экран.
Я показал код для этого в методе onBackPressed()
, поэтому сделайте то же самое для вашей навигации вверх на панели инструментов.