我的MainActivity包含一个带有两个片段的导航抽屉。应用程序启动时会自动加载第一个片段。我希望当按下后退按钮或添加了第一个片段时,应用程序从片段2切换到片段1,然后退出应用程序。我将第一个片段的fragmentTransaction添加到堆栈中,然后在我的popBackStack
方法中调用onBackPressed
。但是,这种行为很奇怪。
当我在第一个片段上时,应用程序应该退出(即执行super.onBackPressed),但是当在第一个片段上并按回时,第一个片段将从fragmentholder中移出,导致出现空白屏幕,然后在第二次按下应用程序关闭。
当我在第二个片段上时,第一次按下后退按钮而第二次关闭应用程序时,什么也没有发生。这是MainActivity.java中的相关代码
@Override
public void onBackPressed() {
if (musicService.isPng()) moveTaskToBack(true);
if (getFragmentManager().getBackStackEntryCount() > 0)
getFragmentManager().popBackStack("returnFragment", 0);
else super.onBackPressed();
}
private void loadSelection(int i) {
navList.setItemChecked(i, true);
switch (i) {
case 0:
FirstFragment firstFragment = new FirstFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, firstFragment)
.addToBackStack("returnFragment")
.commit();
break;
case 1:
SecondFragment secondFragment = new SecondFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragmentholder, secondFragment)
.commit();
break;
case 2:
musicService.removeNotification();
musicService.stopSelf();
MainActivity.this.finish();
}
}
在MainActivity的
onCreate
中调用loadSelection(0)与代码中给出的不同,我尝试了各种实现
popBackStack()
方法的模式,但是所有这些模式都会导致相同的结果。只是要添加,我不想实现变通方法,因为只有2个片段,因为我已经在努力添加新片段。 最佳答案
尝试这个,
在加载第二个片段并将其从第一个事务中删除时,调用方法.addToBackStack(“ returnFragment”)。
关于android - Fragment和BackStack无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39411001/