如何通过单个操作关闭 2 个活动

Posted

技术标签:

【中文标题】如何通过单个操作关闭 2 个活动【英文标题】:How to close 2 activities with single action 【发布时间】:2021-10-27 02:06:41 【问题描述】:

有 3 个活动 A、B、C。

A -> B -> C 带按钮

A

A -> B

   @Override
   public void onClick(View v) 
       Intent intent = new Intent(A.this, B.class);
       startActivity(intent);
   

B -> C

   @Override
   public void onClick(View v) 
       Intent intent = new Intent(B.this, C.class);
       startActivity(intent);
   

B -> A

   @Override
   public void onClick(View v) 
       finish();
   

C -> B

   @Override
   public void onClick(View v) 
       finish();
   

如何使用关闭C和B的按钮从C返回A?

【问题讨论】:

检查***.com/questions/32198055/…。对于这种情况,您也可以使用 startActivityForResult ,只需将结果从 Activity C 发送回 Activity B ,它将关闭,现在您将处于 On Activity A 。你也可以使用Intent.FLAG_ACTIVITY_CLEAR_TOPLike This。 曾经考虑过使用片段而不是活动? Intent.FLAG_ACTIVITY_CLEAR_TOP 没用 【参考方案1】:

只需使用 finish() 即可。

B -> C

@Override
public void onClick(View v) 

    Intent intent = new Intent(B.this, C.class);

    startActivity(intent);
    
    finish(); //Solution

注意:您也可以使用launch modes。

【讨论】:

【参考方案2】:

对 A -> B 和 B -> C 使用 startActivityForResult 然后在 C 中覆盖下面的方法

override fun onBackPressed() 
    setResult(RESULT_OK)
    super.onBackPressed()

现在在 B 覆盖下面的方法

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_CANCELED) return

        when (requestCode) 
            YoutIntentCodeWhenYouGoToC -> 
                setResult(RESULT_OK)
                onBackPressed()
            
        
    

现在您在 A 中。如果您按下后退按钮,则不会显示 B 或 C 屏幕。

【讨论】:

以上是关于如何通过单个操作关闭 2 个活动的主要内容,如果未能解决你的问题,请参考以下文章

防止在关闭屏幕时重新创建 Android 活动

如何关闭应用程序? [复制]

在 github 中查看用户的全部活动 [关闭]

Selenium WebDriver .getWindowHandles()返回先前关闭的窗口,如何区分这些窗口和活动窗口?

我应该在销毁活动时手动关闭我的应用程序创建的 HandlerThreads 吗?

如何在具有 Ajax 的单个表单中使用多个提交按钮 [关闭]