从片段导航到活动时,backstack不会清除

时间:2020-04-25 14:27:12

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

这是我的代码

<fragment
  android:id="@+id/fragment1"
  android:name="com.example.app.Fragment1"
  android:label="SignatureFragment"
  tools:layout="@layout/layout_fragment1">
    <action
      android:id="@+id/action_fragment1_to_main_activity"
      app:destination="@id/main_activity"
      app:enterAnim="@anim/slide_in_from_right"
      app:exitAnim="@anim/no_anim"
      app:launchSingleTop="true"
      app:popEnterAnim="@anim/no_anim"
      app:popExitAnim="@anim/slide_out_to_right"
      app:popUpTo="@id/navigation_graph_id"
      app:popUpToInclusive="true" />
</fragment>

<activity
  android:id="@+id/main_activity"
  android:name="com.example.app.MainActivity"
  android:label="MainActivity"
  tools:layout="@layout/activity_main" />

现在提供导航代码

findNavController().navigate(R.id.action_fragment1_to_main_activity)

当我导航至活动并按回去时,fragment仍然存在。我想在打开活动后清除后退堆栈。

我尝试删除动画,也尝试删除app:launchSingleTop,但没有成功。

1 个答案:

答案 0 :(得分:1)

修改 Jetpack导航旨在用于单个活动,并且不完全支持将参数传递给action s

的活动导航

因此从一个活动导航到另一个活动时要清除堆栈,您仍然需要调用activity.finish()

编辑结束

问题是findNavController().navigate(R.id.action_fragment1_to_main_activity)无法正常工作。

尝试通过navigate(@NonNull NavDirections directions)进行导航。就您而言,它看起来像这样

findNavController().navigate(
     Fragment1Directions.actionFragment1ToMainActivity())

希望有帮助。