Android: навигация назад с использованием той же активности с панелью инструментов - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть activity с разными layouts.Каждый раз, когда я хочу перейти от одного макета к другому, я использую свойство Visibility.Но у меня есть toolbar, и я не знаю, как вернуть навигацию, потому что у меня всегда одна и та же активность.

В обычной ситуации с большим количеством операций я бы использовал свойство android:parentActivityName, нов этой ситуации я не могу, потому что это то же самое действие.

Часть моего кода:

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- SIGN-IN SCREEN -->
<LinearLayout android:id="@+id/screen_sign_in" style="@style/LLScreen">
    <TextView style="@style/GameTitle" />
    <TextView style="@style/GameBlurb" />

    <com.google.android.gms.common.SignInButton android:id="@+id/button_sign_in"
        style="@style/SignInButton" />
</LinearLayout>

<!-- MAIN SCREEN -->
(...)

Код видимости, который я использую для изменения экрана:

void switchToScreen(int screenId) {
        // make the requested screen visible; hide all others.
        for (int id : SCREENS) {
            findViewById(id).setVisibility(screenId == id ? View.VISIBLE : View.GONE);
        }

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 22 февраля 2019

Ваша главная проблема в том, что ваш метод показа "экранов" нетрадиционен.В отличие от обычных подходов использования Деятельностей или Фрагментов, вы просто переключаете Видимости, у которых нет встроенной истории для того, что было показано.

Итак, ваше единственное решение для этого подхода - создать собственный кэш того, что было показано.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...