您好我有一个应用程序如下:MainActivity
使用navigationDrawer
在fragment
之间导航,例如fragment1
,fragment2
,{{1} }。 fragment3
包含Fragment1
tablayout
和孩子fragment1-A
以及fragment1-B
。当用户在fragment1-C
中单击按钮时,他们将转到另一个fragment1-B
(此事务将添加到backstack)。当用户在fragment1-B-a
中按backButton
时。他们将通过fragment1-B-a
中的这些代码返回fragment1-B
。
MainActivity
但是当用户在@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
// if got BackStack, come back to it
if (fragmentManager.getBackStackEntryCount()>0) {
super.onBackPressed();
// if not come to home screen
}else {
if (!homeFlag) {
fragment = new MainFragment();
fragmentManager.popBackStack();
fragmentManager.beginTransaction().replace(R.id.contentMainDrawer, fragment).commit();
homeFlag = true;
} else exit();
}
}
}
(第二fragment1-B-a
tablayout
)内时,如果他们按fragment
。它会给出错误并导致应用崩溃(在BackButton
内按fragment1-B-a
正常工作)
这是错误。 Anyhelp非常感谢。感谢。
backButton
答案 0 :(得分:0)
答案 1 :(得分:0)
确定。我遇到了你的问题。这是因为getBackStackEntryCount()
返回零。
因此,您需要在提交片段onBackPressed
按钮后添加以下行。
fragmentManager.executePendingTransactions();
并添加
fragmentManager(null,FragmentManager.POP_BACK_STACK_INCLUSIVE)而不是 fragmentManager.popBackStack();
FragmentManager.POP_BACK_STACK_INCLUSIVE
)用于弹出整个后台堆栈。
请参阅此discussion
在您的代码中进行编辑:
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
// if got BackStack, come back to it
if (fragmentManager.getBackStackEntryCount()>0) {
super.onBackPressed();
// if not come to home screen
}else {
if (!homeFlag) {
fragment = new MainFragment();
fragmentManager(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)// Change
fragmentManager.beginTransaction().replace(R.id.contentMainDrawer, fragment).commit();
fragmentManager.executePendingTransactions();// Change
homeFlag = true;
} else exit();
}
}
}
希望对你有所帮助。