从android中的堆栈中删除一个活动
我想使用代码从堆栈中删除活动。这是我的案例
- 从页面 AI 前往页面 B。
- 我必须使用返回按钮从页面 B 返回到页面 A。
- 在页面 BI 中,有一个按钮可以转到页面 C。
- 当我点击页面 B 中的按钮时,我正在拨打电话
finish(); //to remove PageB from stack
“好的,这是问题所在”,从页面 C 当我单击返回按钮时,我会被带到页面 A。因为它在堆栈中。
当我单击页面 B 中的按钮时,我想从堆栈中删除页面 A。
请注意,在调用页面 B 时,我无法在页面 A 中调用 finish(),因为我想返回到页面 A。唯一的情况是我不想返回是当页面B中的按钮被点击时。
我怎样才能在安卓中做到这一点? 谢谢
I want to remove an activity from stack using code.Heres my case
- From page A I am going to page B.
- From page B i have to return to page A using return button.
- In page B I am having a button which takes to page C.
- When I click that button in page B , I am calling
finish(); //to remove PageB from stack
Ok, Here is the issue, From Page C when I click the return button I am taken to page A. because it is in stack.
I want to remove Page A from stack when I click the button in page B.
Please note that I cant call a finish() in page A when calling Page B because I want to return back to page A. Only case I dont want to return is when the button in page B is clicked.
How can I do this in android?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当启动 B 时,不要在 A 中调用
startActivity
,而是调用startActivityForResult
。然后,在 A 的活动中,处理onActivityResult
。现在,在 B 中,当您打开 C 时,调用
setResult
在调用完成之前。这将允许您设置一些数据以传递回 A 的 onActivityResult 方法。传递一个标志来指示 A 应该关闭自身,然后调用finish
。在 A 的 onActivityResult 中处理该标志。这样,每个活动都负责自行关闭,并且您不会人为地弄乱返回堆栈。使用意图标志在简单的 A、B、C 情况下工作得很好,但如果这 3 个屏幕是更大解决方案的一部分(即 A、B 和 C 位于您不希望的活动堆栈的深处,则可能会崩溃)搞乱)。
Rather than calling
startActivity
in A when you start B, callstartActivityForResult
. Then in, your activity for A, handleonActivityResult
.Now, in B, when you open C, call
setResult
before calling finish. This will allow you to set some data to get passed back to A'sonActivityResult
method. Pass a flag to indicate that A should close itself and then callfinish
. Handle that flag in A'sonActivityResult
.This way, each activity is responsible for closing itself and you're not artificially messing with the back stack. Using intent flags work fine in a simple A,B,C case, but will probably fall apart if these 3 screens are part of a larger solution (i.e. A,B and C are deep under a stack of activities you don't want to mess with).
您可以通过启动 Intent 直接跳转到另一个 Activity,而不是完成当前的 Activity。
Instead of finishing the current Activity you can jump directly to another Activity by starting an Intent.
您可以使用 startActivity() 从 B 再次调用 A。
You can use startActivity() to call A again from B.
当然此页面上有更好的答案但是,作为解决方法,您可以使用 SharedPreferences 将消息传递给 Activity A,请求它也完成。
活动 A:
活动 C:
请注意,这有一定的风险,因为首选项在重新启动后仍然存在,并且如果您的应用程序在 A 之前被终止,它可能会阻止 A 启动继续。
要解决此问题,您还应该删除 A.onCreate() 中的消息
Surely there is a better answer on this page but, as a workaround, you could use SharedPreferences to pass a message to Activity A, requesting that it also finishes.
Activity A:
Activity C:
Note that this is somewhat risky since the preferences survive the reboots and it can prevent A to start if, for example, your application is killed before A resumes.
To work around this, you should also remove the message in A.onCreate()