从Activity返回父布局抽屉菜单时,悬浮高亮选中错误菜单问题
问题原因
承载抽屉导航的主Activity在跳转到子Activity时,仅进入后台暂停状态,不会主动更新菜单选中标识;从子Activity返回时,主Activity恢复前台展示,但未同步当前实际显示页面与菜单选中态,就会出现高亮滞后的问题。
修复方案
分两种常用实现场景处理:
场景1:使用Jetpack Navigation组件实现导航
在主Activity的onResume生命周期中,主动同步当前导航栈顶目的地与菜单选中状态:
override fun onResume() { super.onResume() val navController = findNavController(R.id.nav_host_fragment) // 匹配当前栈顶目的地对应菜单项,更新选中状态 navController.currentDestination?.id?.let { destId -> binding.navView.setCheckedItem( when(destId) { R.id.home_fragment -> R.id.menu_home R.id.settings_fragment -> R.id.menu_settings // 其余页面与菜单项的对应关系自行补全 else -> R.id.menu_home } ) } }
场景2:自定义DrawerLayout+Fragment切换实现导航
在主Activity的onResume生命周期中,判断当前容器内显示的Fragment,主动修改菜单选中态:
@Override protected void onResume() { super.onResume(); Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.fragment_container); if (currentFrag instanceof HomeFragment) { navigationView.setCheckedItem(R.id.menu_home); } else if (currentFrag instanceof SettingsFragment) { navigationView.setCheckedItem(R.id.menu_settings); } // 其余Fragment对应逻辑自行补全 }
避坑提示:不要在子Activity中操作主Activity的菜单状态,受页面销毁时序影响容易出现状态更新失效,统一在主Activity恢复前台时处理状态同步稳定性最高。
内容的提问来源于stack exchange,提问作者Alirezaarabi
相关产品推荐
相关产品推荐

