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

Kotlin中用Adapter展示JSON数据到RecyclerView时页面空白问题排查

问题分析与解决方案

你的代码核心问题是错误混用了ListAdapter的内置数据管理机制和自定义列表变量,导致RecyclerView无法获取到要展示的数据:

具体问题点

  1. 你继承了ListAdapter,却自行维护awwRow列表,既没有把拉取到的数据同步到ListAdapter的内部数据中,也没调用submitList()方法触发数据更新——ListAdapter的核心逻辑就是通过submitList()来管理数据、触发DiffUtil计算并更新列表,你绕开了这个关键流程。
  2. getItemCount()返回awwRow.size,但如果拉取数据后没有给awwRow赋值(比如仅在ViewModel拿到数据却没传递给adapter的awwRow),或者awwRow始终为空,RecyclerView自然没有内容可展示。
  3. onBindViewHolder中直接用awwRow[position]获取数据,没有使用ListAdapter提供的getItem(position)方法,进一步脱离了ListAdapter的管理逻辑。

修复后的代码

修改PostRowAdapter.kt如下:

class PostRowAdapter(private val viewModel: MainViewModel)
    : ListAdapter<RedditPost, PostRowAdapter.VH>(RedditDiff()) {

    override fun onBindViewHolder(holder: VH, position: Int) {
        val binding = holder.binding
        getItem(position).let {
            binding.title.text = it.title
        }
    }

    // 移除自定义的awwRow变量和重写的getItemCount(),ListAdapter会自动处理数据计数
}

后续必要操作

在你拉取到Reddit数据的位置(比如ViewModel或Activity/Fragment中),调用adapter的submitList()传入数据:

// 假设从API获取到的数据为redditPosts: List<RedditPost>
adapter.submitList(redditPosts)

这样ListAdapter会自动处理DiffUtil对比、更新RecyclerView内容,列表就能正常展示了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:35:20