我的应用程序中有 3 个活动
- 法案A
- 行为B
- 行为C
假设我正在活动ActB
并且我正在ActC
加载finish();
ActB
然后在按下按钮时ActC
,需要将应用程序重定向到ActB
. 但是这一次,当我从 redirected 按下返回时ActB
,另一个ActB
(先前加载的)正在显示。
当我们按下按钮时,有什么方法可以杀死之前加载的所有活动ActC
?
我是安卓新手,它毁了我的时间
请帮助提前谢谢
我的应用程序中有 3 个活动
假设我正在活动ActB
并且我正在ActC
加载finish();
ActB
然后在按下按钮时ActC
,需要将应用程序重定向到ActB
. 但是这一次,当我从 redirected 按下返回时ActB
,另一个ActB
(先前加载的)正在显示。
当我们按下按钮时,有什么方法可以杀死之前加载的所有活动ActC
?
我是安卓新手,它毁了我的时间
请帮助提前谢谢
当您从 启动ActC
时ActB
,请在意图上使用此标志:
Intent intent = new Intent (this, ActB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Java 文档:
“如果设置了,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)旧活动作为新意图。”
只是从 ActB 到 ActC,在调用 Intent 后使用 Intent 和 finish()
Intent intent = new Intent(this, ActC.class);
startActivity(intent);
finish();
然后如果你想从C回到B,那么反过来做同样的事情,所以切换
Intent intent = new Intent(this, ActB.class);
其余的都是一样的。
如果你想“杀死”你应该调用finish()的活动;
为了实现您的目标,您可以执行以下操作。
从 ActA 启动 ActB 时,调用 startActivity(...); 把完成();
这样你就杀死了 Activity A,在调用 ActC 时在 ActB 中做同样的事情。然后当你再次从 ActC 调用 ActB 时,它将开始一个全新的活动。
假设您像这样移动 A -> B -> C 所有先前的实例都将在 backstack 中用于先前的活动。直到并且除非您要求创建新的活动实例,否则只能这样做。当您按下按钮时,您想来到 B 但如果您不需要 B 的新实例,您可以使用 backstack 项目,根据我的说法,您应该这样做。
在按钮单击中,您可以简单地调用活动的 onBackPressed(),当您按下设备的返回按钮时调用该活动。
同样正如 Vee 所说,您可以使用该标志来清除当前活动之上的活动。
如果你不需要一个新的实例,B
那么你可以简单地调用finish()
你onClick()
的C
,这将带你回到B
不需要Intent
或任何其他代码。
如果你需要一个B
then 的新实例,你可以使用 Vee 的建议,请记住,Activities
如果你在两者之间添加更多,这将清除堆栈。
如果您不需要的新实例B
但想将数据传回给它,那么您可以使用该标志FLAG_ACTIVITY_REORDER_TO_FRONT
Intent i = new Intent(ActC.this, ActB.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
// can send data to ActB if needed with putExtras()
startActivity(i);
finish(); // if you want to destroy C and take it off the stack
这不会创建一个新的实例,B
而是将它带到堆栈的顶部,所以当你按下“返回”按钮时,你不会在那里有第二个实例。
当用户按下按钮ActC
返回ActB
(通过创建一个新的ActB
)执行此操作:
Intent intent = new Intent(this, ActB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这将完成ActC
前一个ActB
并创建一个新的ActB
.