调用新活动并销毁当前活动

时间:2017-09-06 11:37:46

标签: android android-activity android-lifecycle

我有三个活动: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

我如何实现这一目标?

5 个答案:

答案 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_TASKFLAG_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()方法开始。