小编adr*_*ilz的帖子

导航popUpTo和PopUpToInclusive不会清除后退堆栈

我是Android Jetpack导航架构的新手。我正在一个新的应用程序上尝试。有一个活动和一些片段,其中两个是登录屏幕和电子邮件登录屏幕。我在导航XML中定义了这些片段。该应用程序的流程如下:

Login screenEmail Login screen

我想要的是,导航到电子邮件登录屏幕后,当我按返回时,该应用程序退出。表示已删除登录屏幕的后堆栈。我知道登录屏幕不应该这样工作,但我仍然只是想办法解决。

我遵循了Google 导航组件入门中的文档。它说,使用app:popUpToapppopUpToInclusive="true"应该清除后台堆栈,但是当我在电子邮件登录屏幕上按回去时,它仍然返回登录而不是退出。

所以,这就是我尝试过的。

nav_main.xml

<fragment android:id="@+id/loginFragment"
          android:name="com.example.myapp.ui.main.LoginFragment"
          android:label="@string/login"
          tools:layout="@layout/fragment_login" >

    <action
        android:id="@+id/action_login_to_emailLoginFragment"
        app:destination="@id/emailLoginFragment"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/slide_out_right"
        app:popUpTo="@+id/emailLoginFragment"
        app:popUpToInclusive="true"/>

</fragment>

<fragment android:id="@+id/emailLoginFragment"
          android:name="com.example.myapp.ui.main.EmailLoginFragment"
          android:label="EmailLoginFragment"
          tools:layout="@layout/fragment_login_email" />
Run Code Online (Sandbox Code Playgroud)

LoginFragment.kt

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    binding.emailLoginButton.setOnClickListener {
        findNavController().navigate(R.id.action_login_to_emailLoginFragment)
    }

    return binding.root
}
Run Code Online (Sandbox Code Playgroud)

我给按钮单击事件。在其中,我使用了导航控制器,通过为其提供操作的ID导航到电子邮件登录屏幕。在中<action>,有app:popUpToapp:popUpToInclusive="true"

一遍又一遍地阅读文档,并阅读了许多StackOverflow问题之后,我发现这些属性应该可以将我的登录屏幕从后栈中删除。但是他们没有。该按钮确实导航到电子邮件登录屏幕,但是当我按返回时,它仍然返回登录屏幕,而不是退出应用程序。我想念什么?

navigation android kotlin fragment-backstack android-jetpack

5
推荐指数
6
解决办法
2677
查看次数