任何人都可以告诉我在下面的场景中该怎么做。 我有四个活动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.当调用取消时,广播接收器被发送到关闭活动。 6.令人惊讶的是我看到的是Ac2,而不是Ac1。我可以看到正在调用onCreate of Ac2。
我不知道如何摆脱这种情绪。任何人都可以帮助我摆脱困境。
由于
答案 0 :(得分:1)
广播有点矫枉过正,FLAG_ACTIVITY_NEW_TASK不是您想要的。
尝试使用intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
答案 1 :(得分:1)
如果我理解正确,您希望支持一系列可能从A1增加到A4的活动。用户可以使用后退按钮从A(N + 1)转换回A(N),并且可以点击取消按钮以将整个堆栈从A(N)向下清除到A2,仅留下A1。
(对不起,如果没有比你原来的描述更清楚: - )
我的第一种方法是使用Activity.startActivityForResult
开始儿童活动。当子活动退出时 - 无论是通过后退按钮,取消按钮还是正常退出 - 该子级的直接父级可以查看传递回onActivityResult
的结果代码,并在结果时终止自身代码表示已选择“取消”按钮。
你尝试过这样的事吗?
答案 2 :(得分: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);
答案 3 :(得分: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();
}
}