如何解决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)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。