0

我的应用程序中有 3 个活动

  1. 法案A
  2. 行为B
  3. 行为C

假设我正在活动ActB并且我正在ActC加载finish(); ActB

然后在按下按钮时ActC,需要将应用程序重定向到ActB. 但是这一次,当我从 redirected 按下返回时ActB,另一个ActB(先前加载的)正在显示。

当我们按下按钮时,有什么方法可以杀死之前加载的所有活动ActC

我是安卓新手,它毁了我的时间

请帮助提前谢谢

4

6 回答 6

2

当您从 启动ActCActB,请在意图上使用此标志:

Intent intent = new Intent (this, ActB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Java 文档:

“如果设置了,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)旧活动作为新意图。”

于 2013-08-14T15:07:57.477 回答
2

只是从 ActB 到 ActC,在调用 Intent 后使用 Intent 和 finish()

Intent intent = new Intent(this, ActC.class);
startActivity(intent);
finish();

然后如果你想从C回到B,那么反过来做同样的事情,所以切换

Intent intent = new Intent(this, ActB.class);

其余的都是一样的。

于 2013-08-14T17:37:16.357 回答
0

如果你想“杀死”你应该调用finish()的活动;

为了实现您的目标,您可以执行以下操作。

从 ActA 启动 ActB 时,调用 startActivity(...); 把完成();

这样你就杀死了 Activity A,在调用 ActC 时在 ActB 中做同样的事情。然后当你再次从 ActC 调用 ActB 时,它将开始一个全新的活动。

于 2013-08-14T15:09:14.537 回答
0

假设您像这样移动 A -> B -> C 所有先前的实例都将在 backstack 中用于先前的活动。直到并且除非您要求创建新的活动实例,否则只能这样做。当您按下按钮时,您想来到 B 但如果您不需要 B 的新实例,您可以使用 backstack 项目,根据我的说法,您应该这样做。

在按钮单击中,您可以简单地调用活动的 onBackPressed(),当您按下设备的返回按钮时调用该活动。

同样正如 Vee 所说,您可以使用该标志来清除当前活动之上的活动。

于 2013-08-14T15:23:57.147 回答
0

如果你不需要一个新的实例,B那么你可以简单地调用finish()onClick()C,这将带你回到B不需要Intent或任何其他代码。

如果你需要一个Bthen 的新实例,你可以使用 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而是将它带到堆栈的顶部,所以当你按下“返回”按钮时,你不会在那里有第二个实例。

于 2013-08-14T15:47:33.047 回答
0

当用户按下按钮ActC返回ActB(通过创建一个新的ActB)执行此操作:

Intent intent = new Intent(this, ActB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这将完成ActC前一个ActB并创建一个新的ActB.

于 2013-08-15T13:31:38.800 回答