【发布时间】:2017-04-07 08:07:57
【问题描述】:
大家好,我正在使用BottomNavigationView。 BottomNavigationView 的每一项都会打开一个片段,该片段将存储在后台堆栈中,但如果一个项目多次选择后堆栈将存储该片段的最新实例。我的意思是当按下返回按钮片段时只会打开一次。
比如,有3个片段..A,B,C
片段模式:A-B-C-B-A-C-A-C
后按输出应为:C-A-B-exit
但我会得到这个模式-C-A-C-A-B-C-B-A-exit
这是我正在使用的代码-
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.nav_home:
mFragment = getSupportFragmentManager().findFragmentByTag("Fragment_Home");
if(!(mFragment!=null && mFragment.isVisible())){
mFragmentManager.popBackStackImmediate("Fragment_Home", FragmentManager.POP_BACK_STACK_INCLUSIVE);
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.container, new HomeFragment(), "Fragment_Home").addToBackStack("Fragment_Home").commit();
}
return true;
case R.id.nav_account:
mFragment = getSupportFragmentManager().findFragmentByTag("Fragment_Account");
if(!(mFragment != null && mFragment.isVisible())){
mFragmentManager.popBackStackImmediate("Fragment_Account", FragmentManager.POP_BACK_STACK_INCLUSIVE);
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.container, new AccountFragment(), "Fragment_Account").addToBackStack("Fragment_Account").commit();
}
return true;
case R.id.nav_category:
mFragment = getSupportFragmentManager().findFragmentByTag("Fragment_Category");
if(!(mFragment != null && mFragment.isVisible())){
mFragmentManager.popBackStackImmediate("Fragment_Category", FragmentManager.POP_BACK_STACK_INCLUSIVE);
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.container, new CategoryFragment(), "Fragment_Category").addToBackStack("Fragment_Category").commit();
}
return true;
}
return false;
}
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START);
}
else if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
}
else if (doubleBackToExitPressedOnce) {
finishAffinity();
}
else {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
}
告诉我我的代码有什么问题。任何帮助将不胜感激。
【问题讨论】:
标签: android android-fragments fragment-backstack