导航抽屉-汉堡菜单正常工作,但向后箭头打开抽屉

问题描述

我正在使用导航抽屉,并且在所有右侧屏幕上都会显示汉堡菜单,但是在其他片段上,当我单击后退箭头时,当我想返回到堆栈中时,导航抽屉将打开。上一个屏幕。

如何更改行为,以便在显示箭头(而不是汉堡菜单)时可以捕获单击箭头的用户?

我正在使用带有片段的导航抽屉。在主要活动中,我使用AppBarConfiguration设置顶级目的地:

AppBarConfiguration config = new AppBarConfiguration.Builder(topLevelDestinations)
                .setDrawerLayout(drawerLayout)
                .build();

    NavigationUI.setupActionBarWithNavController(this,navController,config);
    NavigationUI.setupWithNavController(navView,navController);
    
    navView.setNavigationItemSelectedListener(this);

我正在捕获来自顶级目的地的所有选择并进行适当的导航:

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    item.setChecked(true);

    drawerLayout.closeDrawers();

    int id = item.getItemId();

    switch (id) {
      ...
    }
    drawerLayout.closeDrawer(GravityCompat.START);
    return true;
}

解决方法

您可能正在寻找getFragmentManager().popBackStack()方法。这是放置活动的示例代码段:

@Override
public void onBackPressed(){
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        Log.i("MainActivity","popping backstack");
        fm.popBackStack();
    } else {
        Log.i("MainActivity","nothing on backstack,calling super");
        super.onBackPressed();  
    }
}

如果是片段,请尝试像这样调用片段:

getSupportFragmentManager().beginTransaction()
    .add(detailFragment,"detail") // Add this transaction to the back stack
    .addToBackStack(null)
    .commit();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...