我有以下活动路径:
Main -> A0 -> A1 -> A2 -> B
或
Main -> B
在Main
上,用户可以选择在B
上展示某些内容,或者使用A
系列创建新内容。
完成A
系列后,会转到B
。
当用户通过B
路线到达A
时,我希望后退按钮转到Main
。但是当用户在A
系列中时,我希望后退按钮转到上一个A
(或Main
中的A
)。
我在创建意图时尝试使用FLAG_ACTIVITY_NO_HISTORY
,但这只会让所有内容都回到Main
。
一旦达到阈值,有没有办法标记要删除的活动?
答案 0 :(得分:2)
您可以在要关闭的所有活动中添加BroadcastReceiver
(A0,A1,A2):
public class MyActivity extends Activity {
private FinishReceiver finishReceiver;
private static final String ACTION_FINISH =
"com.mypackage.MyActivity.ACTION_FINISH";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finishReceiver= new FinishReceiver();
registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH));
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(finishReceiver);
}
private final class FinishReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_FINISH))
finish();
}
}
}
要关闭这些活动,请从活动B中触发以下广播。
sendBroadcast(new Intent(ACTION_FINISH));
以下是github示例project。
答案 1 :(得分:0)
以这种方式定义逻辑
在一系列活动中以这种方式定义逻辑
public static Activity A=null;
//in onCreate();
A=this;
//Same way in B
public static Activity B=null;
B=this
现在,无论您想要检查后退条件,都要覆盖OnbackPressed。
@Override
public void onBackPressed()
{
if(Activity_A.A!=null)
{
finish();
return;
}
if(Activity_B.B!=null){
//your condition
finish();
}
}
答案 2 :(得分:0)
您可以在onBackPressed B中使用SINGLE_TOP和CLEAR_TOP标志触发主要活动的新意图。因此无论您如何在B处着陆,按下后退都会将您带到Main并清除所有历史记录。无需搞乱A系列活动。