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

问题描述

我面临的 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)
        }
    }

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

解决方法

 <link rel="stylesheet" type="text/css" href="../css/styles.css">

您在 (null as DashboardAdapter?)?.showListItems(termlist!!,aboolean) 上调用 showListItems() 作为类型而不是实例 DashboardAdapter。假设 dashboardAdapter 是本地类字段。

另外我想这种类型转换不是必需的,因为您已经使用了可选的 dashboardAdapter 因此,它可以简化为:

?

假设每当您检索 API 响应时都应调用此方法。因此,当有新的 API 数据时,必须调用 dashboardAdapter?.showListItems(termlist!!,aboolean)