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

Jetpack Compose点击LazyColumn项跳转详情页触发索引越界崩溃

Jetpack Compose 列表跳转详情页索引越界崩溃修复

崩溃原因

日志明确抛出java.lang.IndexOutOfBoundsException: Index: 0, Size: 0,核心问题是直接访问过滤后列表的0号下标时,列表本身是空的:

  • 本地数据源是同步加载的,进入详情页时数据已经完全就绪,filter操作可以立刻匹配到对应articleId的条目,不会出现空列表
  • 改成Firebase异步加载+MVVM实现后,Compose首次触发重组进入Success分支时,存在瞬时状态:要么列表数据刚完成赋值还没匹配到目标id,要么传入的articleId为空/和列表内id不匹配,此时filter返回空列表,直接访问newArticle[0]必然触发越界

修复方案(保留过滤全量列表的实现逻辑,无需新增单条文章查询接口)

  • 前置校验传入的articleId合法性,id为空时直接展示错误提示
  • 用firstOrNull()替代filter后取0号下标的写法,空安全获取匹配的文章对象
  • 对匹配结果做判空,未拿到目标文章时展示加载态/错误提示,不要强行渲染详情组件
  • 修正原有代码里ArticleContent错误传入title的笔误

修复后代码

@Composable
fun DetailsUI(navController: NavController, articleId: String?,viewModel: ArticleViewModel = hiltViewModel()) {
    val expanded = remember { mutableStateOf(false) }
    val articleResponse = viewModel.articleState.value

    Scaffold {
        when (articleResponse) {
            is Loading -> ProgressBar()
            is Success -> Column {
                // 前置校验articleId
                if (articleId == null) {
                    Utils.printError("文章参数异常,无法加载详情")
                    return@Column
                }
                // 空安全获取匹配的目标文章
                val targetArticle = articleResponse.data.firstOrNull { article ->
                    article.id == articleId
                }
                // 匹配到文章再渲染详情UI
                if (targetArticle != null) {
                    ArticleHeader(image = targetArticle.image)
                    ArticleTitle(title = targetArticle.title, author = targetArticle.author)
                    // 修正原代码笔误:内容区传content而非title
                    ArticleContent(content = targetArticle.content)
                } else {
                    // 未匹配到时展示加载态,避免白屏
                    ProgressBar()
                }
            }
            is Error -> Utils.printError(articleResponse.message)
        }
    }
}

补充说明:如果页面长时间停留在加载态,说明导航时传入的articleId和Firebase返回的文章id字段类型/值不匹配,检查列表项点击时的参数传值逻辑即可。

内容的提问来源于stack exchange,提问作者MayWheather

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:51:24