微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android - 在单个活动应用程序中使用工具栏按钮弹出返回堆栈

如何解决Android - 在单个活动应用程序中使用工具栏按钮弹出返回堆栈

我有一个活动应用程序 (Java)。如果用户没有登录,他看到的第一件事就是欢迎屏幕,他可以在那里登录,然后移动到主页片段。如果用户登录,则用户会直接转到主页片段。

该应用有许多选项卡和辅助屏幕,每一个都是片段。

工具栏始终可见,并包含一个退出按钮。如果用户退出,他应该移动到欢迎屏幕,并且应该删除整个后台堆栈。

我之前在多个活动中尝试过这个,这很简单,因为我已经使用过:

startActivity(new Intent(TabsActivity.this,LoginActivity.class));
finish();

但是,如果我使用完成,当我点击退出时,应用程序就会关闭

当从初始屏幕移动到欢迎屏幕时,我可以毫无问题地弹出返回堆栈,因为我知道“from”和“to”片段。使用导航组件我在 NavGraph 中有这个

<action
        android:id="@+id/action_splashScreenFragment_to_homeFragment"
        app:destination="@id/homeFragment"
        app:popUpTo="@id/splashScreenFragment"
        app:popUpToInclusive="true"/>
<action
        android:id="@+id/action_splashScreenFragment_to_welcomeFragment"
        app:destination="@id/welcomeFragment"
        app:popUpTo="@id/splashScreenFragment"
        app:popUpToInclusive="true"/>

然后我会使用

Navigation.findNavController(view)
   .navigate(R.id.action_splashScreenFragment_to_welcomeFragment);

但是,在这种情况下,由于“注销”按钮位于工具栏中,因此可以在应用程序的任何位置访问它。欢迎屏幕的导航在 MainActivity 中处理。

navController.navigate(R.id.welcomeFragment);

就像我说的,我尝试添加 finish() 并关闭了整个应用程序。

我也尝试添加

navController.popBackStack(R.id.welcomeFragment,true);

navController.popBackStack(R.id.homeFragment,true);

但没有任何效果

退出后如何移至欢迎屏幕并移除后台堆栈?

更新:

我尝试了以下方法

<action
    android:id="@+id/action_global_welcomeFragment"
    app:destination="@id/welcomeFragment"
    app:popUpTo="@id/welcomeFragment"
    app:popUpToInclusive="true" />

在 MainActivity 中:

navController.navigate(R.id.action_global_welcomeFragment);

但是当我在退出后点击后退按钮进入欢迎屏幕时,我仍然可以返回上一个屏幕。

解决方法

您可以将启动画面添加为全局目标。假设操作的名称为 globalSplashScreenAction,您可以像 navGraphDirections.globalSplashScreenAction

一样访问它

您可以在导航图 UI 中右键单击初始屏幕目标并将其设置为全局目标。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。