Fragment中Kotlin+DataBinding实现的RecyclerView运行时不可见问题排查
问题根因
你代码里存在3个直接导致RecyclerView不显示的问题:
- 初始化时给Adapter传入的是空列表:你在
onViewCreated中定义的data = mutableListOf<WorkList>()没有添加任何实际数据,Adapter的getItemCount()返回0,自然不会渲染任何条目。 - 给Adapter的
data变量赋值后没有调用刷新通知:即使后续你给这个data列表添加了数据,因为你没有调用notifyDataSetChanged()或者对应范围的刷新方法,RecyclerView感知不到数据变更,也不会更新视图。 - 可选排查项:如果后续你已经给列表添加了数据还是不显示,检查你的RecyclerView XML布局的高度属性,如果设置为
wrap_content很可能因为测量问题导致高度为0,建议改为match_parent或者固定高度,或者使用wrap_content时给LinearLayoutManager设置setAutoMeasureEnabled(true)。
修复方案
1. 修改WorkFragment的onViewCreated逻辑
添加测试数据,调整配置顺序,赋值后主动通知刷新:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // 先初始化RecyclerView基础配置 val adapter = WorkAdapter() binding.recycler1.adapter = adapter binding.recycler1.layoutManager = LinearLayoutManager(requireContext()) // 构造测试数据,可替换为你实际的业务数据源 val data = mutableListOf<WorkList>().apply { // 这里的参数替换为你自己的WorkList构造入参 add(WorkList("9:00", "张三", "生产部", "18:00", 5)) add(WorkList("8:30", "李四", "质检部", "17:30", 3)) } // 给Adapter设置数据后调用刷新 adapter.data = data adapter.notifyDataSetChanged() }
2. 优化WorkAdapter的数据更新逻辑
你注释掉的replaceList方法就是更规范的写法,直接用这个方法替代直接给data赋值,避免每次手动调用notify:
class WorkAdapter : RecyclerView.Adapter<WorkAdapter.ViewHolder>() { // 把data改成私有,避免外部直接修改漏了通知 private var data = mutableListOf<WorkList>() // 对外暴露替换列表的方法,自动触发刷新 fun replaceList(newList: MutableList<WorkList>) { data = newList.toMutableList() notifyDataSetChanged() } // 其他原有逻辑保持不变... }
修改后Fragment里设置数据直接调用adapter.replaceList(data)即可,不需要手动调用notify。
3. 排查XML布局(上述修改后仍不显示时检查)
确保你的fragment_work.xml里RecyclerView的高度配置正常:
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler1" android:layout_width="match_parent" android:layout_height="match_parent" />
内容的提问来源于stack exchange,提问作者suny jung
相关产品推荐
相关产品推荐

