在我的应用中,已通过身份验证的用户可用的选项之一是删除其帐户。当他们选择此选项时,我想做三件事:
这是“删除帐户”按钮的点击处理程序:
val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
startActivity(intent1)
val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent2)
finish()
实际上发生的是介绍/启动活动,当前活动已完成,但浏览器未启动。我不知道这些标志对于真正的意图是否真的必要。
如果我将点击处理程序中的事件顺序颠倒了,出于某种原因,它似乎可以在硬件电话上运行,但不能在仿真器中运行:
val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent2)
finish()
val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
startActivity(intent1)
我的问题有两个:为什么会这样,正确的方法是什么?
答案 0 :(得分:2)
您不能同时启动2个意图。其中一个优先级高,另一个优先级高(我不确定哪个版本之间被忽略是一致的,所以我不会在此处发表评论)。您需要启动查询/调查,然后启动下一个意图作为响应。或通过一些其他操作来启动主屏幕,告诉它随后启动浏览器(这样,您先注销,转到主页,然后启动浏览器)。您不能直接进行两次startActivity调用。
答案 1 :(得分:1)
使用startActivities
方法,该方法采用Intents
数组和可选的附加项捆绑包。
答案 2 :(得分:0)
使用startActivities而不是startActivity:
val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
val intents = arrayOf<Intent>(intent2, intent1)
startActivities(intents)
finish()
将意图放在数组的最后,需要在顶部显示。