Android 导航组件始终返回起始目的地

时间:2021-02-08 14:51:00

标签: android android-fragments android-architecture-navigation

我正在使用导航组件,并且我有 1 个 Activity 和 3 个片段(startDestination:mainFragment、levelFragment 和 gameFragment)。如果我在 levelFragment 中,它返回到 mainFragment,如果我在 gameFragment 中,它应该返回到 levelFragment,但它返回到 mainFragment。

我按照文档来解决问题,但我没有找到任何解决方案,它仍然发生,为什么?

注意:gameFragment 返回到 levelFragment(它只出现一瞬间)然后立即返回到 mainFragment。

这是我的 navigation.xml :

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_nav"
app:startDestination="@id/mainFragment">

<fragment
    android:id="@+id/mainFragment"
    android:name="com.hroub.physicsapp.MainFragment"
    android:label="fragment_main"
    tools:layout="@layout/fragment_main" >
    <action
        android:id="@+id/action_mainFragment_to_levelFragment"
        app:destination="@id/levelFragment"
        app:enterAnim="@android:anim/fade_in"
        app:exitAnim="@android:anim/fade_out"
        app:popEnterAnim="@android:anim/fade_in"
        app:popExitAnim="@android:anim/fade_out" />
</fragment>

<fragment
    android:id="@+id/gameFragment"
    android:name="com.hroub.physicsapp.GameFragment"
    android:label="fragment_game"
    tools:layout="@layout/fragment_game" >
    <argument
        android:name="index"
        app:argType="integer"
        android:defaultValue="0" />
    <argument
        android:name="concept"
        app:argType="com.hroub.physicsapp.model.Concept" />
    <action
        android:id="@+id/action_gameFragment_to_levelFragment"
        app:destination="@id/levelFragment"
        app:popUpTo="@id/levelFragment"
        app:popUpToInclusive="true"
        />
</fragment>
<fragment
    android:id="@+id/levelFragment"
    android:name="com.hroub.physicsapp.LevelFragment"
    android:label="fragment_level"
    tools:layout="@layout/fragment_level" >
    <action
        android:id="@+id/action_levelFragment_to_gameFragment"
        app:destination="@id/gameFragment"
        app:enterAnim="@android:anim/fade_in"
        app:exitAnim="@android:anim/fade_out"
        app:popEnterAnim="@android:anim/fade_in"
        app:popExitAnim="@android:anim/fade_out" />
    <argument
        android:name="position"
        app:argType="integer"
        android:defaultValue="0" />
</fragment>

导航到 levelFragment 的代码:

MainFragmentDirections.ActionMainFragmentToLevelFragment action = MainFragmentDirections.actionMainFragmentToLevelFragment();
action.setPosition(getLayoutPosition());
Navigation.findNavController((Activity)context, R.id.main_host).navigate(action);

导航到 gameFragment 的代码:

LevelFragmentDirections.ActionLevelFragmentToGameFragment action = LevelFragmentDirections.actionLevelFragmentToGameFragment(concept);
   action.setIndex(getLayoutPosition());
   action.setConcept(concept);
   Navigation.findNavController((Activity)context, R.id.main_host).navigate(action);

从 gameFragment 到 levelFragment :

Navigation.findNavController(requireActivity(), R.id.main_host).navigate(R.id.action_gameFragment_to_levelFragment);

0 个答案:

没有答案