我有一个Activity,我添加了一个ListFragment。当我单击一个按钮时,新的Fragment将替换ListFragment。我使用addTobackStack(null)所以当我按下后退按钮时,我将结束ListFragment。如果用户没有按下后面而是点击按钮,那么他会转到另一个新的片段。从那里我希望用户返回ListFragment,所以当我进行fragmentTransaction时我不使用addTobackStack()。
架构是:
ListFragment -------> GameFragment --------> EndFragment
来自GameFragment
我可以返回ListFragment
和EndFragment
我必须转到ListFragment
而不是GameFragment
。
所以我猜我在某种程度上覆盖了我的Activity中的onBackPressed(),所以当我在EndFragment
上与ListFragment
进行交易时
问题是当我覆盖EndFragment
onBackPressed()
(除非有更好的方法来执行此操作......)
我现在使用的onBackPressed()代码:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
Log.i("FINISH", "Finish");
finish();
} else {
Log.i("FINISH", "POP STACK");
getSupportFragmentManager().popBackStack();
}
}
答案 0 :(得分:0)
更好的方法是从BackStack中删除AF
活动,这是所有以前的活动以及后退按钮查找以前活动的位置。
为此,在您的AF
活动中,将FLAG_ACTIVITY_CLEAR_TOP
标记添加到您的意图中,如下所示:
Intent intent = new Intent(this, BF.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
另一个选项是覆盖按后退按钮时发生的情况。覆盖onBackPressed()
方法:
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(this, BF.class);
goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(goToMainActivity);
}