我有一个" a-b-c-d"活动历史记录。我想杀死活动" C"one_answers" D"并开始一个新的" X"活动,以便新订单变成" A-B-X"。
Intent i = new Intent(D.this,B.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("start_x", true);
startActivity(i);
if (getIntent().getBooleanExtra("start_x", false)) {
Intent i = new Intent(B.this,X.class);
startActivity(i);
}
这就是我这样做的方式(我多次使用它(。是否有更简单的方法?
编辑:我忘了写这篇文章:在" D"中,必须按下后键,然后转到" C"活动。
您可以通过两种方式进行此操作。
第一种方式
在androidmanifest.xml中,用于C和D活动添加属性android:noHistory="true"
第二路
在C活动和D活动中,单击时添加标志。
ex:
Intent i = new Intent(C.this, D.class);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
对D活动也会做同样的事情...
一个选项是您可以设置活动C&d具有相同的亲和力,可以调用finishaffinity((清除当前任务堆栈具有相同亲和力的活动。有关更多信息,请参阅https://developer.android.com/reference/android/App/activity.html#finishaffinity((
添加到@bharadwaj coundinya
的上述答案中第三条方法:
我会像这样操纵我的活动堆栈:
从A到B:
//In A
Intent intent = new Intent(this, B.class);
startActivity(intent);
[活动堆栈:A-> B]
从B到C:
//In B
Intent intent = new Intent(this, C.class);
startActivity(intent);
[活动堆栈:a-> b-> c]
从C到D(这次我将使用饰面((;(:
//In C
Intent intent = new Intent(this, D.class);
startActivity(intent);
finish();
[活动堆栈:A-> B-> D]
然后在d中,如果我的唯一目的是在用户返回时启动x:
//In D
protected void onPause() {
super.onPause();
Intent intent = new Intent(this, X.class);
startActivity(intent);
finish();
}
[活动堆栈:A-> B-> X]
现在,如果用户再次从x导航,它将降落在b:
上[活动堆栈:A-> B]