android - popBackStack() 在 android NavController 中不起作用

标签 android android-jetpack android-navigation

我正在使用 android JetPack 导航在我的 fragment 之间导航。这就是我的navigation graph好像

 <?xml version="1.0" encoding="utf-8"?><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/registration_nav_graph"
app:startDestination="@id/registrationStoreNameFragment">

<fragment
    android:id="@+id/registrationStoreNameFragment"
    android:name="com.minidukaan.android.feature.registration.view.RegistrationStoreNameFragment"
    android:label="fragment_registration_store_name"
    tools:layout="@layout/fragment_registration_store_name" >
    <action
        android:id="@+id/action_registrationStoreNameFragment_to_registrationStoreUrlFragment2"
        app:destination="@id/registrationStoreUrlFragment2" />
</fragment>

<fragment
    android:id="@+id/registrationStoreUrlFragment2"
    android:name="com.minidukaan.android.feature.registration.view.RegistrationStoreUrlFragment"
    android:label="RegistrationStoreUrlFragment" >
    <action
        android:id="@+id/action_registrationStoreUrlFragment2_to_registrationLocationFragment"
        app:destination="@id/registrationLocationFragment" />
    <argument
        android:name="store_name"
        app:argType="string" />
    <argument
        android:name="store_slug"
        app:argType="string" />
</fragment>


<fragment
    android:id="@+id/registrationLocationFragment"
    android:name="com.minidukaan.android.feature.registration.view.RegistrationLocationFragment"
    android:label="fragment_registration_location"
    tools:layout="@layout/fragment_registration_location" >
    <action
        android:id="@+id/action_registrationLocationFragment_to_registrationSuccessFragment"
        app:destination="@id/registrationSuccessFragment" />
    <argument
        android:name="store_name"
        app:argType="string" />
    <argument
        android:name="store_slug"
        app:argType="string"
        android:defaultValue=""/>
</fragment>
<fragment
    android:id="@+id/registrationSuccessFragment"
    android:name="com.minidukaan.android.feature.registration.view.RegistrationSuccessFragment"
    android:label="fragment_registration_success"
    tools:layout="@layout/fragment_registration_success" />

来自 RegistrationStoreNameFragment我导航到 RegistrationStoreUrlFragment像这样
private lateinit var navController: NavController
override fun init(savedInstanceState: Bundle?) {
    super.init(savedInstanceState)
    ....

    binding.lifecycleOwner = this
    navController = view?.let { Navigation.findNavController(it) }!!
    val action = RegistrationStoreNameFragmentDirections.
                        actionRegistrationStoreNameFragmentToRegistrationStoreUrlFragment2(storeName, it.slug)
                            navController.navigate(action)
}
所以它可以完美导航,但是当我这样做时 navController.popBackStack()RegistrationStoreUrlFragment然后它不会导航回来。任何帮助都将受到高度赞赏,因为我在这个问题上停留了很长时间。
对于其他 fragment ,popBackStack 工作正常,但不适用于上面提到的 fragment 。

最佳答案

你想什么时候导航?
如果在任何自定义事件上您想导航回之前添加的 fragment ,那么,
您必须定义 弹出到 在您的 下采取行动 fragment 标记 导航图 ,

<fragment
android:id="@+id/registrationStoreUrlFragment2"
android:name="com.minidukaan.android.feature.registration.view.RegistrationStoreUrlFragment"
android:label="RegistrationStoreUrlFragment" >
<action
        android:id="@+id/action_pop_back"
        app:destination="@id/registrationSuccessFragment"
        app:popUpTo="@+id/registrationSuccessFragment"/>
</fragment>
并像这样在导航中调用它,
findNavController().navigate(R.id.action_pop_back)

关于android - popBackStack() 在 android NavController 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68251108/

相关文章:

android - 我是否需要创建重复的 XML 文件来支持应用程序样式的向后兼容性?

android - 在来自服务器的多个数据源的客户端上显示分页数据

Android Jetpack Navigation组件与BottomAppBar菜单交互

Android:使用 navigateUpFromSameTask() 时转换错误

android - Jetpack 导航 : Title and back/up arrow in the action bar?

java - Android 如何以编程方式确定我的应用程序正在使用哪种 XML 布局?

android - 如何在 Style 中使用应用程序命名空间

android - 如何修复 CameraX 旋转支持

java - Jetpack 导航上未执行导航操作

java - Android - onBackPressed 对 fragment 没有影响