我的项目有4个活动,活动A的用户在此之后转到B到C和D.我需要在活动D中创建一个按钮来直接关闭程序,因为如果用户必须关闭所有活动(D - > C) - > B - > A->关闭)这将是不友好的。
答案 0 :(得分:2)
在每个活动中注册一个广播接收器,监听“关闭所有动作”,当按下最后一个活动中的按钮时,发送该广播,所以所有活动注册将执行他们的“onReceive”方法broadcastreceiver,只要他们注册,他们就会完成。 这绝对可以解决问题,虽然老实说安静性很差,但你在导航中出错的可能性很高,也许片段或标签更适合你正在尝试的东西,而不是创造这样的东西。一堆活动......
希望这会有所帮助......
问候!
答案 1 :(得分:2)
我认为onActivityResult可能是更好的选择。如果需要完成任务,您可以完成活动,否则只需回溯之前的活动
答案 2 :(得分:0)
您应该覆盖每个onBackPressed()
的{{1}}并致电Activity
。
答案 3 :(得分:0)
假设您的应用程序中的第一个活动名为ActivityMain。据推测,它将是堆叠中最老的一个。
使用标志FLAG_ACTIVITY_CLEAR_TOP创建启动ActivityMain的意图。在该intent中设置一个额外的内容以指示这是一个应用程序出口,并使用该intent调用startActivity()。这将清除堆栈并让您回到Activity main。
在ActivityMain中调用getIntent(),然后检查退出的应用程序Extra值。如果已设置,请调用finish()。
答案 4 :(得分:0)
一个不那么优雅的解决方案:
而不是致电startActivity
,请致电startActivityForResult
,从A到D。
在活动D上,按下按钮时,设置任何结果(比方说Activity.RESULT_OK
)并拨打finish()
。
在每个活动(从A到C)上,覆盖方法onActivityResult
以检查结果。如果结果为Activity.RESULT_OK
,则您设置相同的结果并再次调用finish()
。
如果您愿意,可以添加带有一些标志的Intent
,而不仅仅是设置结果,以告知之前的活动自行完成。
答案 5 :(得分:0)
简单地做一件事。在您的活动中添加一个重写的方法onPause
onPause(){
finish();
}
一旦您从任何活动中退回,这将关闭您的所有活动。