Android Компонент навигации popUp Для возврата к всплывающему фрагменту - PullRequest
0 голосов
/ 08 мая 2020

Пожалуйста, не помечайте это как дубликат, я уже прочитал этот вопрос SO, но все же он не работает ошибка popUpTo компонента навигации Android поведение popUpTo компонента навигации Android Компонент навигации + Логин + Вложенный BottomNavigationView

Я использую

def nav_version = "2.2.1"
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

Сценарий: вот мой график приложения enter image description here

И это мой код навигации:

<fragment
        android:id="@+id/splashFragment"
        android:name="com.view.SplashFragment"
        android:label="SplashFragment" >
        <action
            android:id="@+id/action_splashFragment_to_loginFragment"
            app:destination="@id/loginFragment"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popUpTo="@id/loginFragment"
            app:popUpToInclusive="true"/>
        <action
            android:id="@+id/action_splashFragment_to_mainFragment"
            app:destination="@id/mainFragment"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popUpTo="@id/mainFragment"
            app:popUpToInclusive="true"/>
    </fragment>

Когда я нажимаю кнопку «Назад», когда нахожусь на MainFragment или LoginFragment, я все еще могу вернуться к splashFragment. У меня уже есть теги app:popUpTo и app:popUpToInclusive. Я хочу, чтобы мое приложение не возвращалось к splashFragment

1 Ответ

1 голос
/ 08 мая 2020

Вы используете неправильный идентификатор в popUpTo

Согласно руководству popUpTo :

app:popUpTo сообщает библиотеке навигации извлекать несколько адресатов из заднего стека как часть вызова navigate(). Значение атрибута - это идентификатор самого последнего пункта назначения, который должен оставаться в стеке.

Вы также можете включить app:popUpToInclusive="true", чтобы указать, что пункт назначения, указанный в app:popUpTo, также следует удалить из заднего стека.

popUpTo должен указывать на пункт назначения, который уже находится в заднем стеке, который вы хотите извлечь из заднего стека. Поэтому, если вы хотите вытолкнуть все от до до splashFragment, вы должны использовать app:popUpTo="@id/splashFragment". Если вы хотите вытолкнуть все от до и splashFragment включительно, тогда вы должны использовать app:popUpTo="@id/splashFragment" и app:popUpToInclusive="true":

<fragment
    android:id="@+id/splashFragment"
    android:name="com.view.SplashFragment"
    android:label="SplashFragment" >
    <action
        android:id="@+id/action_splashFragment_to_loginFragment"
        app:destination="@id/loginFragment"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popUpTo="@id/splashFragment"
        app:popUpToInclusive="true"/>
    <action
        android:id="@+id/action_splashFragment_to_mainFragment"
        app:destination="@id/mainFragment"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popUpTo="@id/splashFragment"
        app:popUpToInclusive="true"/>
</fragment>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...