我是Android开发的新手,这是我的问题:
我有2个活动:A和B.
从A,我通过startActivity(new Intent(A.this, B.class))
打电话给B.
从B开始,我做了一些事情并以同样的方式回到A:startActivity(new Intent(B.this, A.class))
然而,当我在新A上时,按下"返回"按钮,首先我看到B类,然后是A类的旧版(未更改版本)。
我尝试在finish();
方法中放置onPause()
。但是,我的活动在方向更改时崩溃了。
如何正确控制活动后台堆叠?提前谢谢。
答案 0 :(得分:1)
听起来好像不是打电话给startActivity
以回到A
,而是可以打电话给finish()
;.这将使您回到之前的Activity
。
如果您使用FLAG_ACTIVITY_CLEAR_TOP
:
Intent intent = new Intent(B.this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
关于接受的答案建议使用FLAG_ACTIVITY_REORDER_TO_FRONT
- 对于您的情况,它确实无关紧要。但是在略有不同的情况下,你有A-> B-> C并且你使用REORDER返回A,你实际上最终会得到一个看起来像B-> C->的堆栈。一个。使用CLEAR_TOP,您最终只得到A.点是,REORDER
意味着REORDER
,CLEAR_TOP
应该弹出后台。在你的简单情况下,他们碰巧也会做同样的事情,但在我看来,按照他们的意图使用旗帜是更好的做法。
答案 1 :(得分:0)
要么StartActivityForResult要么考虑使用片段。如果你需要在活动之间跳转,想想你为什么要这样做?如果您在两者之间传递信息,那么有几个选项。片段为您提供了选项,您可以将数据保存在托管片段的Activity上,或者您可以让Singleton生活在您将扩展的Application类中。
答案 2 :(得分:0)
了解活动生命周期 - here。你必须实现保存实例。
答案 3 :(得分:0)
当您在没有任何其他标志的情况下调用startActivity
时,您将创建指定的Activity的新实例。这意味着你的后台最终看起来像这样:
A -> B -> A(2)
您有两种选择:
第一个选项,您可以在Intent上添加标志,指示它将A重新排序到前端(如果它已经存在于后端堆栈中)。注意,这不会关闭B;之后你必须在B中拨打finish()
。
Intent intent = new Intent(B.this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startAcvitiy(intent);
finish();
第二个选项是在A中使用startActivityForResult
而不是startActivity
,让活动B将结果传回给A.我认为这更清晰,它为您提供了一种非常简单的方法来回应B完成时发生的事情(例如,您可以更新您的UI)。请参阅Android开发者网站的this guide。