我有一个活动A,然后转到B然后是C,然后是D然后是F,在我完成FI之后想再次跳到B,但所有活动C,D和F都需要从历史中移除但是仍然可以从B回到A,有没有办法可以做到这一点?谢谢!
答案 0 :(得分:0)
您可以截取活动F(或其他事件)中的后退按钮事件,并使用intent
返回活动B.
@override
public void onBackPressed(){
// Do what you need done here
Intent intent = new Intent(this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// if you need to pass data back to ActivityB
//intent.putExtra("tagName", yourData);
startActivity(intent);
this.finish();
}
将标记添加为xbadal建议是正确的想法,但根据Android文档,您似乎需要使用FLAG_ACTIVITY_CLEAR_TOP
。
来自Android文档:
如果设置,则正在启动的活动已在运行中 当前任务,然后而不是启动它的新实例 活动,其上的所有其他活动将被关闭 这个意图将作为一个传递到(现在在顶部)旧活动 新的意图。
例如,考虑一个由活动组成的任务:A,B,C,D。 如果D调用带有解析为的Intent的startActivity() 活动B的组成部分,然后C和D将完成,B接收 给定的Intent,导致堆栈现在为:A,B。
https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
根据调用intent
时设置的其他标志,您可能需要通过调用getFlags()
来检查已包含哪些标志,并使用{{1}删除冲突的标志}。
答案 1 :(得分:0)
没有直接的方法。只需替代,您可以使用以下代码来查看目的。
请在F
活动的onBackPressed方法中使用 navigateToB 。
注意:开始结果的所有活动。请参阅活动代码 B 和 F 以了解相关信息。除 B 和 A 之外的所有活动finish
。
<强> A.java 强>
public class A {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
finish();
}
}
}
<强> B.java 强>
public class B {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
Intent i = new Intent();
i.putExtra("shouldClose", false);
setResult(RESULT_OK, i);
finish();
}
}
}
<强> C.java 强>
public class C {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
Intent i = new Intent();
i.putExtra("shouldClose", true);
setResult(RESULT_OK, i);
finish();
}
}
}
<强> D.java 强>
public class D {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
Intent i = new Intent();
i.putExtra("shouldClose", true);
setResult(RESULT_OK, i);
finish();
}
}
}
<强> F.java 强>
public class F {
public void navigateToB() {
Intent i = new Intent();
i.putExtra("shouldClose", true);
setResult(RESULT_OK, i);
finish();
}
@Override
public void onBackPressed() {
navigateToB();
}
}
答案 2 :(得分:0)
试试这个。这将清除您之前的所有堆栈并开始新的活动
Intent intent= new Intent(F.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
ActivityCompat.finishAffinity(this)