我有三个活动A,B和C,C位于活动堆栈之上。 C包含片段f1,f2。点击我想要替换的按钮" f1"用" f2"并完成活动A,B。任何想法如何实现。
答案 0 :(得分:1)
在启动活动D时尝试使用Intent.FLAG_ACTIVITY_CLEAR_TASK
。这将清除堆栈中的所有活动,但在您的情况下包括活动C.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
它将清除堆栈中的所有Activity。
FLAG_ACTIVITY_CLEAR_TASK标志将导致在活动开始之前清除与活动关联的任何现有任务。即,活动成为新的根,任何旧活动都已完成。此标志只能与FLAG_ACTIVITY_NEW_TASK
一起使用答案 1 :(得分:0)
这个怎么样,第一次
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Removes other Activities from stack
//Add Intent Extra to Start Activity C
intent.putExtra("startC", true);
startActivity(intent);
为意图添加额外内容,然后在活动A中获取意图 如果这个额外的回复真的启动活动C与意图额外,
finish(); //Activity A.
intent.putExtra("startD", true);
抓住意图启动活动D,然后C将在D
下的堆栈上我建议的是通过转到活动A来清除堆栈,获得任何启动指定活动的意图,然后将意图堆叠到您需要去的地方,希望这是有道理的。
如果您希望只将活动D放在首位,请使用此
Intent intent = new Intent(this, ActivityD.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Removes other Activities from stack
//Start Activity
startActivity(intent)
答案 2 :(得分:0)
我会说使用intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
,但它会清除它顶部的所有活动..
我建议创建一个静态方法或者处理程序..对它们有一个完成方法,这样你就可以通过调用它们而不完成所有活动来自由地完成任何你想要的活动。
为您的每个活动A,B,C,D创建一个静态处理程序:
public static Handler h;
h = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what) {
case 0:
finish();
}
};
在按钮onlick监听器中:
FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
transaction.replace(layout, fragment, tag).commit();
ACTIVITY_A.h.sendEmptyMessage(0);
ACTIVITY_B.h.sendEmptyMessage(0);
每次调用处理程序时,它都会完成活动A和B,也会替换片段
答案 3 :(得分:0)
问题解决了。感谢FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_CLEAR_TOP标志