我有三个活动:A,B和C.
A是B的意图,B是C的意图,
当我在C中完成操作时,我想销毁 C并返回A,而不是B.
我试过这个:
finish();
B b = new B();
b.finish();
在C中,没有工作;并且
finish();
B b = new B();
b.onDestroy();
在C中,它会产生NullPointerException
。
我如何实现这一目标?
答案 0 :(得分:1)
使用此功能:
Intent i = new Intent(FromActivity.this,ToActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
有关 Intent 的文档:
FLAG_ACTIVITY_NEW_TASK 如果设置,此活动将成为此历史记录堆栈上新任务的开始
FLAG_ACTIVITY_CLEAR_TASK 如果在传递给Context.startActivity()的Intent中设置,此标志将导致在活动开始之前清除与活动关联的任何现有任务
答案 1 :(得分:0)
完成您的操作后,您可以调用意图来进入您想要的活动,如下所示:
Intent intent = new Intent(ActivityC.this, ActivityA.class);
startActivity(intent);
答案 2 :(得分:0)
Intent i = new Intent(MainActivity.this,SecondActivity.class);
startActivity(i);
finish();
答案 3 :(得分:0)
有几种方法可以做到这一点:
首先:在清单中为您的B活动添加android:noHistory属性,如下所示:
<activity android:name=".A"/>
<activity android:name=".B" android:noHistory="true"/> <!-- This attribute will prevent adding activity to activity stack-->
<activity android:name=".C"/>
第二:刚开始新活动后致电完成
// Put this code in your B activity
Intent intent = new Intent(this, C.class);
startActivity(intent);
finish() // This will finish current activity (activity B in your case) and activity stack will only contain A activity
第三步:在你的C活动意图中放置标志FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK
// Put this code in your B activity
Intent intent = new Intent(this, C.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // This will exclude current activity (activity B in your case) from activity stack
startActivity(intent);
答案 4 :(得分:0)
从Intent
调用活动,然后致电finish()
:
startActivity(new Intent(C.this, A.class));
finish();
finish()
将从活动堆栈中删除活动,新活动将通过startActivity()
方法开始。