2

我有几十个活动:1-主要,1-动画,10-其他,它是更多活动的子集(几十个)。

从 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 -----------------------------------------------
4

3 回答 3

3

您能否发布您的 onClick 处理程序以返回主按钮?

你应该做这样的事情:

Intent i = new Intent(this, MainActivity.class);
startActivity(i);
finish();

编辑:您也可以尝试设置此标志:

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

如果接收活动已经在某个堆栈中,这应该清除调用和接收活动之间的活动堆栈。

于 2010-10-01T19:07:39.410 回答
1

首先,您通常不应该自己调用onStoponDestroy(或者,就此而言,任何其他 Activity 生命周期方法)。由于 ,Android 会为您执行此操作,finish如果您自己执行此操作,您可能会感到困惑。

其次,您的“返回主”侦听器根本不应该调用任何startActivity。相反,如果你想清除活动堆栈,你应该在finish那里调用。如果您可能离主活动有几个活动并且想直接返回,则应该startActivityForResult在启动子活动时使用,并在“主按钮”上设置一个带有 true 标志的结果 Intent。然后,任何中间活动都将被onActivityResult调用,如果他们看到标志,他们也可以立即调用,finish以便控制权回到您的主要活动。

编辑:实际上,startActivitywithFLAG_ACTIVITY_CLEAR_TOP是获得相同效果的更直接的方法。坚持下去。

于 2010-10-01T19:48:08.937 回答
0

完成不只是“完成”您的应用程序/活动,如文档所述

“当你的活动完成并应该关闭时调用它。ActivityResult 会传播回通过 onActivityResult() 启动你的人。”

换句话说,您的完成呼叫将通过您之前参与的任何活动传播回来。

于 2012-07-18T02:17:23.023 回答