我正在使用导航组件,并且我有 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);