1

我有四个活动,即A,B,C和D。A启动B,B启动C,C启动D。当C启动D时,我想根据情况销毁活动B(逻辑将保留在活动C),这样当我从D返回时,它将遵循D->C->A路径。所以我想从 C 中破坏活动 B。这怎么可能?

4

5 回答 5

3

当您调用 Activity C 时完成 Activity B 取决于您的逻辑。例如

if(true){
Intent in = new Intent(B.this,c.class);
startActivity(c);
}
else
{
Intent in = new Intent(B.this,c.class);
startActivity(c);
finish();
}
于 2012-05-07T11:11:45.703 回答
1

根据您想要的逻辑,从C返回时只需调用finish();活动B onActivityResult

于 2012-05-07T09:58:29.030 回答
1

完成活动(请求代码);

这个方法可以帮助你..

要做的是使用来自 B 的一些请求代码启动活动 C ... 并相应地使用此请求代码完成活动

于 2012-05-07T09:56:43.520 回答
0

好的,那么您可以调用 startActivityForResult(in,5); 启动 Activity C. 并在 Activity B 中实现覆盖方法,如

 @Override 
   protected void onActivityResult(int requestCode, int resultCode, Intent intent)       {                
super.onActivityResult(requestCode, resultCode, intent); 
    if(resultCode==0)
    { 
      finish(); 
    }
    else
   {

    } 
    }

并在调用 Activity D 时在 Activity 中设置结果代码

Intent backintent = getIntent(); 
  setResult(0); 
  Intent in = new Intent(C.this,D.class); 
  startActivity(in);

而已....

于 2012-05-10T10:03:47.233 回答
0

我认为您可以做的是,您可以在每个课程中注册一个广播,并且无论何时您想要完成 sendbroadcast 并完成该活动。

        // REGISTER IN ONCREATE
        BroadcastReceiver form_filled = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String received_action = intent.getAction();

                if (received_action.equals("finish_a")) {
                    finish();
                }
            }
        };
        registerReceiver(form_filled, new IntentFilter("finish_a"));

        // THIS YOU HAVE TO DO WHEN YOU WANT TO FINISH
        Intent temp_intent = new Intent();
        temp_intent.setAction("finish_a");
        sendBroadcast(temp_intent);
于 2012-05-07T10:02:15.437 回答