更新BottomNavigation时painterResource()触发索引越界异常
问题复现场景
- 动态更新Compose BottomNavigation配置(含新增导航项、修改图标着色等操作)时,应用处于前台运行状态下执行更新可正常工作
- 关闭应用后基于新状态初始化导航组件时,会在
painterResource()调用位置抛出索引越界异常 - 当前采用Compose嵌入XML布局的接入方案,暂未排查到接入逻辑存在问题
相关实现代码
BottomNavigation( backgroundColor = backgroundColor, ) { navigation.navigationItems.forEach { navigationItem -> val isSelected = selectedItem == navigationItem.destination val iconResId = if (isSelected) navigationItem.selectedIconRes else navigationItem.iconRes val hasBadge = badges.contains(navigationItem.destination) BottomNavigationItem( icon = { if (hasBadge) { BadgedBox( modifier = Modifier.background(badgeBackgroundColor), badge = { Badge(backgroundColor = badgeColor) } ) { Icon( painterResource(iconResId), contentDescription = null ) } } else { Icon( painterResource(iconResId), contentDescription = null ) } }, selected = isSelected, onClick = { onItemSelected(navigationItem.destination) }, alwaysShowLabel = true, selectedContentColor = selectedTintColor, unselectedContentColor = tintColor ) } }
排查进展更新
更新1
已确认异常与drawable资源本身相关,替换出问题的drawable资源后异常可稳定消失。目前存在待解释的现象:动态更新配置时运行完全正常,仅在重启应用走初始化流程时才会触发异常。
更新2
动态更新配置后图标存在渲染瑕疵,典型表现为第三个导航图标上会残留第四个图标的内容碎片,需要排查该现象的可能诱因。
内容的提问来源于stack exchange,提问作者coffeLord
相关产品推荐
相关产品推荐

