MVP模式下RecyclerView Adapter获取数据成功但UI不显示问题求助
RecyclerView数据不显示问题排查
核心问题
你代码里最致命的错误在Presenter层的showList方法:
// 错误写法 (null as DashboardAdapter?)?.showListItems(termlist!!, aboolean)
你主动将对象强转为null后调用方法,由于Kotlin的空安全调用特性,?.后面的showListItems方法根本不会执行,适配器内部的transactionList数据集一直是空的,getItemCount返回0,自然不会渲染任何UI。
其他可能的问题点
- 适配器实例不统一:要保证设置给RecyclerView的
dashboardAdapter,和你在Presenter中调用showListItems的是同一个实例,不能重复初始化新的适配器对象。 - 线程问题:网络请求成功后回调
showList方法时,需要切换到安卓主线程再调用适配器的更新方法,子线程执行notifyDataSetChanged不会触发UI刷新。 - Item布局异常:检查你的item布局根节点的高度是否设置为
match_parent,如果是会导致单个item占满整个RecyclerView,看起来像没有数据,需要改为wrap_content或者固定高度。 - 调用参数错误:调用
showListItems时传入的aboolean如果为true会先清空原有数据集,要确认你传入的参数符合业务预期,同时要确认返回的termlist本身不为空。
修复示例
1. 调整Presenter构造,传入正确的适配器实例
class DashboardPresenter( private val dashboardView: DashboardView, private val dashboardModel: DashboardModel, // 新增参数,从View层传入初始化完成的适配器实例 private val dashboardAdapter: DashboardAdapter ) { fun onCreateView() { onClick() dashboardView.setAdapter() getDashboardRequest() } fun showList(termlist: List<DashboardData>?, aboolean: Boolean) { termlist?.takeIf { it.isNotEmpty() }?.let { dashboardAdapter.showListItems(it, aboolean) } } }
内容的提问来源于stack exchange,提问作者Hubby Tiwari
相关产品推荐
相关产品推荐

