popBackStack()在android NavController中不起作用



我使用android JetPack导航在我的片段之间导航。这就是我的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)

}

所以它可以完美地导航,但当我在RegistrationStoreUrlFragment中执行navController.popBackStack()时,它不会导航回来。任何帮助都将不胜感激,因为我已经在这个问题上呆了很长时间了。

对于其他片段,popBackStack运行良好,但不适用于上述片段。

您希望何时导航?

如果在任何自定义事件中,您希望导航回以前添加的片段,则

您必须在NavGraphFragment标签下定义popUpTo操作,

<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)

当前片段到后台片段

findNavController().popBackStack(R.id.homeFragment, true)

它对我来说很好。也许它会帮助你

对于我的情况,我遇到了同样的问题,我尝试了这里给出的解决方案,在xml中设置app:popUpTo,但对我来说,问题是在这种情况下,后退按钮只工作一次。所以我用app:popUpToSaveState设置如下,现在它可以来回工作:

<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/anonymous_navigation"
app:startDestination="@id/startupFragment">
<fragment
android:id="@+id/landingFragment"
android:name="com.myApp.ui.landing.LandingFragment"
android:label="fragment_landing"
tools:layout="@layout/fragment_landing" >
<action
android:id="@+id/action_landingFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popUpToSaveState="@id/landingFragment" />
</fragment>
</navigation>

然后在代码内部,当按下后,我将调用navigateUp

findNavController().navigateUp()

最新更新