好吧,我知道还有其他问题乍一看会让这个问题看起来像重复,但这些答案都不适用于我的情况,
我想要的是第一个片段显示为关于后退按钮如何工作的主活动,我需要从导航抽屉中选择的任何片段在按下后退按钮时返回到第一个片段然后用户会再次按下该应用程序即可退出该应用程序。
所以我尝试使用 addToBackStack ,当我移动到另一个片段时,如果我按下后退按钮,它会回到我的第一个片段(完全按照我的意愿)但是再次按下后退按钮会让我看到白屏(我想知道这是否是由于到我使用下面包含的交易动画)所以为了解决这个问题,我尝试覆盖后退按钮并调用完成();但这会导致即时消息中的任何片段完成而不是返回到第一个片段,我从上述链接和许多其他链接中尝试了一些解决方法,但找不到合适的修复任何建议?
这是我的主要活动 displayView
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new FirstFragment();
break;
case 1:
fragment = new glideFrag();
break;
case 2:
fragment = new secondGlideFrag();
break;
case 3:
fragment = new thirdGlideFrag();
break;
case 4:
fragment = new forthGlideFrag();
break;
case 5:
fragment = new lgFrag();
break;
case 6:
fragment = new cyanFrag();
break;
case 7:
fragment = new sonyFrag();
break;
case 8:
fragment = new SecondFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.enter,R.anim.exit,R.anim.pop_enter,R.anim.pop_exit);
//fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack("first Fragment").commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
我发现这看起来是一个很好的解决方法
private boolean popNext = false;
if(popNext){
if(position == INITIAL_POSITION){
onBackPressed();
mDrawerLayout.closeDrawer(mDrawerList);
popNext = false;
return;
}
getSupportFragmentManager().popBackStackImmediate();
}
else{
if(position == INITIAL_POSITION){
mDrawerLayout.closeDrawer(mDrawerList);
return;
}
popNext=true;
}
但我对 android 还是很陌生,我不确定将 INITIAL_POSITION 设置为什么,我试过了
private static final INITIAL_POSITION = 0;
但没有任何运气