【问题标题】:How to destroy previous activity in Activity?Activity中如何销毁之前的activity?
【发布时间】:2012-05-07 09:49:51
【问题描述】:

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

【问题讨论】:

  • 你可以得到你的答案here
  • 将活动 B 引用到 C 并调用 ref.finish();其中 ref 是对 B 活动的引用。

标签: android android-activity destroy activity-finish


【解决方案1】:

在调用活动 C 时完成活动 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();
}

【讨论】:

  • 当我从 C 调用 D 时,我想完成 B,而不是从 B 本身完成 B。从 B 本身完成 B 甚至不是初学者的问题。
  • 好的然后你可以调用 startActivityForResult(in,5);启动 Activity C。并在 Activity B 中实现覆盖方法,例如 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent);如果(结果代码==0){完成(); }else{} } 并在调用 Activity D 时在 Activity 中设置结果代码,如 Intent backintent = getIntent();设置结果(0); Intent in = new Intent(C.this,D.class);开始活动(在);就是这样
【解决方案2】:

finishActivity(requestCode);

这个方法可以帮到你..

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

              // 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);
      

      【讨论】:

        【解决方案5】:

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

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

        当你像调用Activity D一样在Activity中设置resultcode

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

        就是这样……

        【讨论】:

          猜你喜欢
          • 2012-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-14
          • 2022-12-16
          • 1970-01-01
          • 2014-12-02
          • 1970-01-01
          相关资源
          最近更新 更多