我的申请中有3项活动
假设我正在参与ActB
活动,而我正在加载ActC
而不是finish();
ActB
然后在ActC
中按下按钮时,需要将应用程序重定向到ActB
。但是这次当我从重定向的ActB
按回来时,另一个ActB
(之前加载的)正在显示。
当我们按下ActC
中的按钮时,有没有办法杀死之前加载的所有活动?
我是android的新手,它毁了我的时间
请帮忙 提前谢谢
答案 0 :(得分:2)
从ActC
启动ActB
时,请在目标上使用此标记执行此操作:
Intent intent = new Intent (this, ActB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
的Javadoc:
“如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给作为新意图的(现在在顶部)旧活动。“
答案 1 :(得分: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);
剩下的就是一样。
答案 2 :(得分:0)
如果你想“杀死”这个活动,你应该调用finish();
为了达到目标,您可以做以下事情。
从ActA启动ActB后,调用startActivity(...)后; put finish();
这样你杀死了活动A,在调用ActC时在ActB中也这样做。然后当你再次从ActC调用ActB时,它将启动一个全新的活动。
答案 3 :(得分:0)
假设你这样移动 A - > B - > C 所有以前的实例都将在后台进行以前的活动。 直到并且除非您要求创建新的活动实例,否则只会这样做。 当你按下按钮时你想来B但是如果你不需要B的新实例,你可以使用背包物品,根据我的说法,你应该这样做。
在按钮单击中,您可以简单地调用onBackPressed(),当您按下设备的按钮时调用该活动。
另外,正如Vee所说,你可以使用该标志来清除当前活动之上的活动。
答案 4 :(得分:0)
如果您不需要 B
的新实例,那么您只需拨打finish()
onClick()
中的C
即可会将您带回B
,无需Intent
或任何其他代码。
如果您需要B
的新实例,那么您可以使用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
的新实例,但会将其带到堆栈的顶部,因此当您按下“返回”按钮时,您将不会有第二个实例。
答案 5 :(得分:0)
当用户按下ActC
中的按钮返回ActB
时(通过创建新的ActB
),请执行以下操作:
Intent intent = new Intent(this, ActB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这将完成ActC
和之前的ActB
并创建新的ActB
。