我有几十个活动:1-Main,1-Animation,10-Other's,它是更多活动的子集(几十个)。
在Main中,您可以通过按钮转到任何 Others 。
其他调用子集活动,并调用动画活动。
每个活动(包括子集和动画)都有一个按钮,可以返回主活动。
所有按钮都会让用户更正活动。
问题:在主要活动中,我想通过设备的后退键退出。但是,接下来发生的事情是它在所有以前的活动中倒退。
“返回主要”按钮(在每个活动中)中有完成和 onDestroy 。所以,我不确定为什么那些屏幕/活动没有被破坏......?
感谢任何意见/建议/澄清 - 谢谢
[添加代码段]
注意:我移动/添加/删除了完成,onDestroy,onStop ...尝试了很多方法,因此片段中显示的只是我试过的一种方式...
// ---------------------------------------------------------
mainMenu.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// do something
Intent Maincode = new Intent();
Maincode.setClassName(
"com.bt.test",
"com.bt.test.Maincode");
// startActivity(Maincode); // go to maincode
finish();
onStop();
onDestroy();
startActivity(Maincode); // go to maincode
}
}); // end -----------------------------------------------
答案 0 :(得分:3)
您可以发布onClick处理程序以返回主按钮吗?
你应该这样做:
Intent i = new Intent(this, MainActivity.class);
startActivity(i);
finish();
编辑: 您也可以尝试设置此标志:
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
如果接收活动已经在某个堆栈中,这应该清除调用和接收活动之间的活动堆栈。
答案 1 :(得分:1)
首先,您通常不应该自己调用onStop
或onDestroy
(或者,就此而言,任何其他Activity生命周期方法)。由于finish
,Android会为您执行此操作,如果您自己动手,可能会感到困惑。
其次,你的“返回主要”听众不应该调用任何startActivity
。相反,如果要清除活动堆栈,则应该在那里调用finish
。如果您可能在远离main的几个活动并希望直接返回,则应在启动子活动时使用startActivityForResult
,并在“主按钮”上设置结果Intent并附加真实标记。然后,任何中间活动都会被onActivityResult
调用,如果他们看到标记,他们也可以立即finish
,以便控制权返回到您的主要活动。
编辑:实际上,startActivity
与FLAG_ACTIVITY_CLEAR_TOP
是一种更直接的方式来获得相同的效果。坚持下去。
答案 2 :(得分:0)
完成不只是“完成”您的应用程序/活动,如文档状态
“当您的活动完成并且应该关闭时调用此方法。将ActivityResult传播回通过onActivityResult()启动您的任何人。”
换句话说,您对完成的调用将通过您之前进行的任何活动传播回来。