如何通过单个操作关闭 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_TOP
Like 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 个活动的主要内容,如果未能解决你的问题,请参考以下文章
Selenium WebDriver .getWindowHandles()返回先前关闭的窗口,如何区分这些窗口和活动窗口?