我正在使用 Android 应用程序。我面临着像在后堆栈历史记录中添加 fragment 这样的问题。让我清楚地解释一下,我想从 fragment A 导航到 fragment B,然后使用 fragment B 中的按钮单击返回 fragment A。以上场景运行良好,在导航到 fragment A 后,当我单击设备中的后退箭头时,导航到 fragment B。我不希望这种情况发生。给我一个解决方案。我的代码结构如下:
fragment A:
.......
FragmentB fragmentB = new FragmentB();
showFragmentOmitStack(fragmentB);
....
public void showFragmentOmitStack(Fragment fragment) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.container,fragment);//add // replace
transaction.addToBackStack(null);
transaction.commit();
}
fragment B:
FragmentA fragmentA = new FragmentA();
showFragment(fragmentA, "FragmentA");
public void showFragment(Fragment fragment, String back_stack_name) {
FragmentManager fragmentManager = thisActivity.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container, fragment);
fragmentTransaction.addToBackStack(back_stack_name);
fragmentTransaction.commit();
}
在我的 Activity java 文件中:
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
if (getFragmentManager().getBackStackEntryCount() == 0) {
showAlertDialog(Constants.EXIT_APP, Constants.APP_NAME);
} else {
getFragmentManager().popBackStackImmediate();
}
}
}
最佳答案
试试这个:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
}else {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
}
关于java - 在android中浏览Fragment而不将其添加到backstack中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46237502/