我的应用在用户首次运行应用时显示了注册活动,如下所示:
因此,当用户点击每个屏幕上的按钮时,活动将以完全相同的顺序相互启动.
当用户从活动#2转到#3时,是否可以完全从历史堆栈中删除#1和#2?我喜欢它,以便如果用户在#3,并点击后退按钮,他们只是转到主屏幕,而不是回到启动画面.
我想我可以用任务来完成这个任务(即在#3上开始一个新任务)但是想看看是否有更简单的方法,
谢谢
是否可以在堆栈上启动活动,清除之前的整个历史记录?
情况
我有一个活动堆栈,可以是A-> B-> C或B-> C(屏幕A选择用户令牌,但许多用户只有一个令牌).
在屏幕C中,用户可以采取使屏幕B无效的动作,因此应用程序想要将它们带到屏幕A,而不管它是否已经在堆栈中.屏幕A应该是我的应用程序中堆栈上唯一的项目.
笔记
还有许多其他类似的问题,但我没有发现任何可以回答这个问题的问题.我试过调用getParent().finish()- 这总是导致空指针异常.FLAG_ACTIVITY_CLEAR_TOP仅在活动已在堆栈上时才有效.
我的应用程序中的所有活动都要求用户登录才能查看.用户几乎可以从任何活动中注销.这是应用程序的要求.在用户注销的任何时候,我都想将用户发送到Login Activity.此时我希望此活动位于历史堆栈的底部,以便按"后退"按钮可将用户返回到Android的主屏幕.
我已经看到这个问题问了几个不同的地方,都回答了类似的答案(我在这里概述),但我想在这里提出收集反馈.
我已经尝试通过设置其Intent标志来打开Login活动,FLAG_ACTIVITY_CLEAR_TOP这似乎是在文档中概述的,但是没有实现我将Login活动放在历史堆栈底部并阻止用户导航回来的目标以前看到的登录活动.我也尝试使用android:launchMode="singleTop"清单中的Login活动,但这也没有完成我的目标(并且似乎无论如何都没有效果).
我相信我需要清除历史堆栈,或者完成之前打开的所有活动.
一种选择是让每个活动onCreate检查登录状态,finish()如果没有登录.我不喜欢这个选项,因为后退按钮仍可供使用,当活动靠近时自动导航.
下一个选项是维护LinkedList对所有可以从任何地方静态访问的开放活动的引用(可能使用弱引用).注销时,我将访问此列表并迭代所有先前打开的活动,并finish()在每个活动上进行调用.我很快就会开始实施这种方法.
但是,我宁愿使用一些Intent标志技巧来实现这一目标.我很高兴发现我可以满足我的应用程序的要求,而不必使用我上面概述的两种方法中的任何一种.
有没有办法通过使用Intent或清单设置来实现这一点,或者是我的第二个选择,保持已LinkedList打开的活动是最佳选择?或者我还有另一种选择吗?
我在我的应用程序中有几个活动.并且流程非常复杂.当我单击Logout应用程序naviagates登录屏幕时,用户可以通过取消按钮退出(调用system.exit(0))
当我退出或退回按钮时,系统从堆栈调用一个活动:(当我到达登录界面时,如何清除堆栈中的所有活动?调用finish()是不切实际的,因为有很多活动,一些活动不应该关闭是活动的,如本机相机调用活动.
validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
Run Code Online (Sandbox Code Playgroud) 当我点击我的个人资料活动中的退出按钮时,我想将用户带到登录页面,他需要使用新的凭据.
因此我使用了这段代码:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在" onButtonClick注销"按钮中.
但问题是,当我点击登录活动上的设备后退按钮时,它会将我带到ProfileActivity.当我按下LoginActivity上的设备后退按钮时,我希望应用程序关闭.
我究竟做错了什么?
我还在LoginActivityandroid:launchMode="singleTop"的清单中添加了
谢谢
我在Android中有一个包含多个活动的应用程序,我希望用户能够通过按菜单按钮注销.我遇到的问题是
A)的Android不会让你终止应用程序和
B),即使我的用户发送给LoginActivity他们又可以随时按下背部和马上回以前的活动,他们是in.
我已经尝试使用以下两个标志启动Activity:
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我也亲自尝试过每一个.
我也打过电话finish()后startActivity(intent),我在另一个StackOverflow的问题读取.
我想结合两个意图标志,就像我们在android中所做的那样
Intent intent = new Intent(this, MapsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情,但它对我不起作用
val intent = Intent(context, MapActivity::class.java)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
Run Code Online (Sandbox Code Playgroud) 我的问题与这类问题略有不同.我需要删除或清除我的活动堆栈,然后开始一项新活动.我不认为这是一个clear_top标志问题.我正在解释一个例子:
我的活动流程:
Login > Home > Screen1 > screen2 ....
Run Code Online (Sandbox Code Playgroud)
我完成登录活动或使用no_history标志调用.所以我的活动看起来像这样
Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack]
Run Code Online (Sandbox Code Playgroud)
我需要处理会话错误.如果在任何点发生任何会话错误,我需要返回登录活动.但请记住,我没有堆栈中的登录活动.所以clear_top不起作用.
如果在Screen2中发生任何会话错误,那么我需要清除完整堆栈(screen2,screen1,home),然后开始登录活动.因此,在返回按钮后按下登录活动将关闭我的应用程序.
有没有办法清除活动堆栈?
提前致谢
我在应用程序中实现了DayNight主题,并添加了在昼夜模式之间切换的设置,但是如果不重新启动就无法动态切换模式。
如果setDefaultNightMode()在更改设置后使用,则设置活动不会更改模式,但后堆栈中的活动会更改。如果我另外使用setLocalNightMode()设置活动,则会重新创建活动并更改其模式,但现在堆栈中的活动不会。我找不到一种方法来完成这两项工作。有没有办法做到这一点?
我从活动A-> B-> C-> D-> E开始..当我从D-> E开始时,堆栈中应该没有活动但是,用户可以使用D中的后退按钮并转到C(没有刷新活动C,像正常的后退功能一样)