Android Navigation Component 2.1.0(Java)导航抽屉跳转问题求助
嘿,我看了你的代码和问题描述,马上发现几个容易踩的小坑,咱们快速搞定这个问题:
核心问题:初始化顺序与重复配置出错
你的代码里存在**重复初始化drawerLayout和两次创建mAppBarConfiguration**的问题,而且顺序搞反了——先给NavigationView关联了NavController,之后才重新创建正确的AppBar配置,这会导致导航UI的关联逻辑混乱,抽屉点击自然没反应。
修正后的MainActivity onCreate代码
把重复的代码删掉,调整初始化顺序,确保配置逻辑连贯:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 记得加上这个,你之前的代码里没写,但肯定要有 // 1. 初始化Toolbar Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); // 2. 只初始化一次DrawerLayout和NavigationView DrawerLayout drawerLayout = findViewById(R.id.drawer_layout); NavigationView navigationView = findViewById(R.id.nav_view); // 3. 获取NavController NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); NavController navController = navHostFragment.getNavController(); // 4. 创建正确的AppBar配置(包含所有抽屉菜单项ID) mAppBarConfiguration = new AppBarConfiguration.Builder( R.id.nav_home, R.id.nav_claims, R.id.nav_products, R.id.nav_deliveries, R.id.nav_quotes, R.id.nav_policies, R.id.nav_payment, R.id.nav_about, R.id.nav_contact) .setDrawerLayout(drawerLayout) .build(); // 5. 先关联NavigationView与NavController NavigationUI.setupWithNavController(navigationView, navController); // 6. 再配置ActionBar与导航的关联 NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); }
必须补充:实现onSupportNavigateUp方法
你大概率没实现这个方法,它是处理汉堡按钮点击、抽屉弹出/收起以及导航返回的核心逻辑,一定要加上:
@Override public boolean onSupportNavigateUp() { NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); return NavigationUI.navigateUp(navController, mAppBarConfiguration) || super.onSupportNavigateUp(); }
最后再确认两个细节
- 确保
mobile_navigation.xml里的每个<fragment>节点的android:id和activity_main_drawer.xml里菜单项的android:id完全一致(你已经确认过,但再检查一遍没坏处) - 导航图里的每个目标Fragment都正确配置了
name属性,指向对应的Fragment类,没有拼写错误
按照上面的步骤改完,导航抽屉应该就能正常跳转了,毕竟你说其他功能都正常,说明NavController和导航图的基础配置是没问题的,就是初始化顺序和配置重复的小问题~
内容的提问来源于stack exchange,提问作者Mitch M
相关产品推荐
相关产品推荐

