0

谁能告诉我在以下情况下我应该怎么做。我有四个活动 Ac1、Ac2、Ac3 和 Ac4,每个活动都有一个取消按钮,按下时应该转到 Ac1。后退按钮也应该返回到以前的活动。Ac1 是流程的起点,Ac4 是流程的终点。

我在取消按钮和最后一个 Ac4 中使用了 FLAG_ACTIVITY_NEW_TASK 以返回到 Ac1。但这并没有按预期工作。所以要做到这一点,我有一个广播寄存器来在任何活动中按下取消按钮时停止活动。因此,在收到广播接收器时,我会调用 finish() 来关闭堆叠的活动。未设置开发人员选项时一切正常(不要保留活动)。设置此选项时,1. Ac1 移动到 Ac2。2. Ac2 启动,但 Ac1 清零。3. Ac2 移动到 Ac3 4. Ac3 启动,Ac2 被清除。5. 当 Cancel 被调用时,广播接收器被发送到关闭活动。6. 令人惊讶的是,我看到调用的是 Ac2,而不是 Ac1。我可以看到 Ac2 的 onCreate 正在被调用。

我不知道如何摆脱这种情况。谁能帮我摆脱这种情况。

谢谢

4

4 回答 4

1

如果我理解正确,您希望支持可能从 A1 增长到 A4 的一系列活动。用户可以使用后退按钮从 A(N+1) 转换回 A(N),并且可以点击取消按钮来清除从 A(N) 到 A2 的整个堆栈,只留下 A1。

(对不起,如果这不比你原来的描述更清楚:-)

我的第一种方法是使用Activity.startActivityForResult启动子活动。当子活动退出时(无论是通过后退按钮、取消按钮还是正常退出),该子活动的直接父级可以查看传递回的结果代码,onActivityResult如果结果代码指示取消,则自行终止按钮被选中。

你有没有尝试过这样的事情?

于 2013-02-27T16:40:01.507 回答
1

广播有点矫枉过正,而 FLAG_ACTIVITY_NEW_TASK 不是您想要的。尝试在取消按钮中调用 Ac1intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

于 2013-02-27T16:26:25.597 回答
0

我会这样做:

class Activity2{

    int KILL_ACTIVITY=555;

    startActivityForResult(new Intent(Activity2.this,Activity3.class), 0);

    @Override onActivityResult(... , int result){
        if(result==KILL_ACTIVITY)
            finish();
    }

}

class Activity3{

    int KILL_ACTIVITY=555;
    @Override onClick(View v){
        if(v.getId()==R.id.button){
            setResult(KILL_ACTIVITY);
            finish();
        }
    }


    startActivityForResult(new Intent(Activity3.this,Activity4.class), 0);

    @Override onActivityResult(... , int result){
        if(result==KILL_ACTIVITY)
            finish();
    }
}
于 2013-02-27T16:38:47.450 回答
0

尝试将取消按钮链接到 ac1 尝试清除旧的活动堆栈并跳转到 ac1

Intent intent  = new Intent(this, ac1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);
于 2013-02-27T16:36:07.070 回答