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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 18:24:03