简体   繁体   English

启动另一个属于另一个堆栈的活动时如何清除当前活动堆栈

[英]How to clear current activity stack when start another activity which belong to another stack

For example:A start B, B start C, A and C belongs to 'Hello'-stack, and B belongs to 'World'-stack, when user press back button in Activity C, it will return to A. Note1:B means a lot of activities , not just one activity, like A start B1,B1 start B2, B2 start B3....,Bn start C. Note2:I need Bs remain in stack until C has been launched , when user press back in B3, it should return to b2. 例如:A开始B,B开始C,A和C属于“ Hello”堆栈,B属于“世界”堆栈,当用户在活动C中按向后按钮时,它将返回到A。注1:B表示很多活动,而不仅仅是一个活动,例如A开始B1,B1开始B2,B2开始B3 ....,Bn开始C。注2:在用户按下C时,我需要B保留在堆栈中直到C启动在B3中,应返回到b2。 在此处输入图片说明

I actually have implemented this need by using startActivityForResult,and I just want to know is there any way using stack to implements this. 实际上,我已经通过使用startActivityForResult实现了这一需求,我只想知道有什么方法可以使用堆栈来实现这一点。

从B启动活动C时,只需调用finish()即可。然后在活动C中覆盖onBackPressed()。并添加代码以启动活动A。

When going from activity A to activity B, go as below: 从活动A转到活动B时,请执行以下操作:

 Intent i=new Intent(ActivityA.this,ActivityB.class);
 startActivity(i);

And as you want to open C from B but don't want B to be in stack, so do as below: 并且由于您想从B打开C但又不希望B在堆栈中,因此请执行以下操作:

 Intent i=new Intent(ActivityB.this,ActivityC.class);
 startActivity(i);
 ActivityB.this.finish();

So automatically when backpressed on C, you will get A and not B. 因此,在C上按下时会自动得到A,而不是B。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); or intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 或intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);或 works for me. 为我工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM