[英]Fragment Navigation with Navigation Drawer
我的Android应用实际上有一个小问题。
我的应用程序包含一个导航抽屉,用于在应用程序内部进行导航。 例如
导航抽屉:
当应用启动时,我将加载概述片段。 如果用户单击其他项目,我将使用以下方式更改片段:
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment, TAG);
transaction.addToBackStack(null);
transaction.commit();
现在的问题是,例如,当用户从1> 2> 4> 3切换并按下返回键时,这只会使他返回一个片段。 3> 4> 2> 1
所以我添加了代码,这将使他回到每个Backpress的Fragment 1。
public boolean onKeyDown(int keyCode, KeyEvent event) {
int exit = 0;
if (keyCode == KeyEvent.KEYCODE_BACK) {
getFragmentManager().popBackStack();
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = new Overview();
fm.beginTransaction().add(R.id.frame_container, fragment).addToBackStack("fragBack").commit();
return false;
}
return false;
}
好的,首先还不错,但是现在我在“更深层次”上添加了更多片段,但是在回压时它们不应该回到片段1。
例如
4.1详细信息(返回键返回到片段4。填充)<4.1.1更多详细信息(返回键返回到片段4.1)。
如果有人有一个想法,我将如何在我的应用程序中处理导航,那就太好了。
格尔茨
您的代码是正确的,需要更改逻辑。 每当您离开NavigationDrawer时,首先都要使用此代码清除堆栈中的所有片段
private void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
然后,将相应的selected(1或2或3)片段添加到堆栈中。
private void navigateToFragment(Fragment fragment, String TAG){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_container, fragment, TAG);
transaction.addToBackStack(null);
transaction.commit();
}
当您像2-> 2.1-> 2.2那样深入时,在反压时您将返回2.2-> 2.1-> 2。 无需覆盖onKeyDown()方法并再次添加片段
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.