You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新BottomNavigation时painterResource()触发索引越界异常

Compose 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:48:19