【发布时间】:2015-07-28 19:36:22
【问题描述】:
好吧,我知道还有其他 questions 乍一看让这个看起来像重复,但这些答案都不适用于我的情况,
我想要的是第一个片段显示为关于后退按钮如何工作的主活动,我需要从导航抽屉中选择的任何片段在按下后退按钮时返回到第一个片段用户再按一下就会退出应用程序。
所以我尝试使用 addToBackStack,当我移动到另一个片段时,如果我按下后退按钮,它会回到我的第一个片段(完全按照我的意愿),但再次按下后退按钮会让我看到白屏(我想知道是否这是由于我使用了下面包含的事务动画)所以为了解决这个问题,我尝试覆盖后退按钮并调用完成();但这会导致我所在的任何片段完成而不是返回到第一个片段,我从上述链接和许多其他链接中尝试了一些解决方法,但找不到合适的修复任何建议?
这是我的主要活动显示视图
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;
但没有任何运气
【问题讨论】:
-
这个已经问了很多次了。请搜索。
-
我知道,我读过,我什至引用了一个
标签: android android-fragments fragment-backstack