完成另一项活动的活动

时间:2013-04-03 15:48:57

标签: android android-activity activity-finish

我有3个活动A,B和C. A导致B导致C.我希望能够在A和B之间来回移动但是我想在C开始后完成A和B 。我理解如何通过意图启动C时关闭B但是如何在C启动时关闭A?

4 个答案:

答案 0 :(得分:12)

onCreate()方法中,为变量分配静态实例以创建Singleton:

public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
}

@Override
public void finish() {
    super.finish();
    instance = null;
}

然后在C:

public void onCreate(Bundle savedInstanceState) {
    if(ActivityA.instance != null) {
        try {  
            ActivityA.instance.finish(); 
        } catch (Exception e) {}
    }
}

(对B和A重复上述代码)

我会说这不优雅,并且必然会引入奇怪的生命周期错误。

如果您可以调整您的要求会更好 - 如果您不能,您可以使用单个活动并将A,B和C更改为Fragments

我会建议广播,但据我所知,你不能在“非恢复”活动上安装实例级广播接收器。

使用Service绑定到活动似乎有点矫枉过正 - 但如果上述操作不起作用,您可能需要考虑。

祝你好运!

答案 1 :(得分:2)

((Activity)context_of_another_activity).finish();

答案 2 :(得分:0)

我意识到这是一个很晚的答复,但是我认为BroadcastReceiver是解决此问题的最佳方法。

在活动A中添加此

    //class object
    BroadcastReceiver receiver;

    //add this to onCreate()
    receiver =new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    };
    IntentFilter filter =new IntentFilter();
    filter.addAction("FINISH_A");
    registerReceiver(receiver, filter);

   //add this to Activity A as well
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

然后,在活动C中的onCreate()(或您要完成活动A的任何时间)

Intent local =new Intent();
    local.setAction("FINISH_A");
    sendBroadcast(local);

答案 3 :(得分:-1)

从B开始C时,请这样做:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

现在,C开始了,但A和B都没了。

但是,我认为如果您可以重新考虑您的设计,以便C不依赖于A完成与否,我认为会更好。