Kotlin中用Adapter展示JSON数据到RecyclerView时页面空白问题排查
问题分析与解决方案
你的代码核心问题是错误混用了ListAdapter的内置数据管理机制和自定义列表变量,导致RecyclerView无法获取到要展示的数据:
具体问题点
- 你继承了
ListAdapter,却自行维护awwRow列表,既没有把拉取到的数据同步到ListAdapter的内部数据中,也没调用submitList()方法触发数据更新——ListAdapter的核心逻辑就是通过submitList()来管理数据、触发DiffUtil计算并更新列表,你绕开了这个关键流程。 getItemCount()返回awwRow.size,但如果拉取数据后没有给awwRow赋值(比如仅在ViewModel拿到数据却没传递给adapter的awwRow),或者awwRow始终为空,RecyclerView自然没有内容可展示。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
相关产品推荐
相关产品推荐

