mvp 回收器适配器不显示数据

Posted

技术标签:

【中文标题】mvp 回收器适配器不显示数据【英文标题】:mvp recycler adapter not showing data 【发布时间】:2021-09-13 02:41:41 【问题描述】:

RecyclerView 面临的问题是数据来自服务器,并且 API 响应在控制台中正确打印。

但是,当我尝试在适配器中设置数据时,出现了问题,或者数据未在 UI 上更新的流程出现问题。

//This is my adapter class

class DashboardAdapter(val context: Context) : RecyclerView.Adapter<DashBoardHolder>() 
    private var transactionList = ArrayList<DashboardData>()
    
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DashBoardHolder 
        val inflator = LayoutInflater.from(parent.context)
        val view = ActivityDashboardDataBinding.inflate(inflator, parent, false)
        val viewHolder = DashBoardHolder(view)
        return viewHolder
    

    override fun onBindViewHolder(holder: DashBoardHolder, position: Int) 
        val quickModel = transactionList[position]
        holder.tvName.text = quickModel.bookingTitle
    

    fun showListItems(dashboardlist: List<DashboardData>?, aboolean: Boolean) 
        when 
            aboolean -> transactionList.clear()
        
        if (dashboardlist != null && !dashboardlist.isEmpty())
            this.transactionList.addAll(dashboardlist)
        notifyDataSetChanged()
    

    override fun getItemCount(): Int 
        return transactionList.size
    

MyHolderClass

class DashBoardHolder(val binding: ActivityDashboardDataBinding) :
    RecyclerView.ViewHolder(binding.root) 
    var tvName: TextView = binding.textViewGrandrukName
    var tvTime: TextView = binding.tvGrandrukTripDetails
    var tvPlace: ImageView = binding.btnGhandruk
    var ivRectangle: ImageView = binding.imageView5

同样,我在视图部分这样设置适配器:

//setting adapter in Presenter class
fun setAdapter() 
    var layoutmanager: LinearLayoutManager? = LinearLayoutManager(appCompatActivity)
    val firstVisiblePosition = layoutmanager!!.findFirstVisibleItemPosition()
    binding!!.includesDashboardRecyclerview.rvBookingList.setHasFixedSize(true)
    binding!!.includesDashboardRecyclerview.rvBookingList.layoutManager = layoutmanager  
    binding!!.includesDashboardRecyclerview.rvBookingList.adapter = dashboardAdapter  
    layoutmanager!!.scrollToPositionWithOffset(firstVisiblePosition, 0)

在 Presenter Class 中,像这样从 Presenter 调用 setAdapter

class DashboardPresenter(
        private val dashboardView: DashboardView,
        private val dashboardModel: DashboardModel
    ) 

        fun onCreateView() 
            onClick()
            dashboardView.setAdapter()
            getDashboardRequest()
        

        //calling adpter function here
        fun showList(termlist: List<DashboardData>?, aboolean: Boolean) 
            (null as DashboardAdapter?)?.showListItems(termlist!!, aboolean)
        
    

我无法理解这里出了什么问题。

【问题讨论】:

你把layoutmanager设置为你的recyclerview了吗 @Linh 我这样设置,出现在上面 sn-ps 视图类的 setadapter 函数中。 var 布局管理器:线性布局管理器? = LinearLayoutManager(appCompatActivity) 绑定!!.includesDashboardRecyclerview.rvBookingList.layoutManager = layoutmanager null as DashboardAdapter 这是类名.. 不是实例名对吗? @Zain 是的,这是类名 【参考方案1】:
(null as DashboardAdapter?)?.showListItems(termlist!!, aboolean)

您在DashboardAdapter 上调用showListItems() 作为类型而不是实例dashboardAdapter。假设dashboardAdapter 是一个本地类字段。

另外我猜这种类型转换是不必要的,因为你已经使用了可选的? 因此,可以简化为:

dashboardAdapter?.showListItems(termlist!!, aboolean)

假设每当您检索 API 响应时都应该调用它。因此,当有新的 API 数据时,必须调用 showList()

【讨论】:

以上是关于mvp 回收器适配器不显示数据的主要内容,如果未能解决你的问题,请参考以下文章

数据未显示在回收站视图中

从火力基地查询的数据不会显示在recyclerview和grid视图中

Android:从图库中获取图像,在回收器适配器中显示它们

在回收站视图中显示不同大小的多个图像

使用MVP打造项目框架

自定义适配器不显示数据