【问题标题】:RecyclerView inside RecyclerView displaying wrong dataRecyclerView里面的RecyclerView显示错误的数据
【发布时间】:2020-04-09 13:44:48
【问题描述】:

我有一个适配器,其中包含另一个 recyclerview,当我将数据加载到此适配器时,我还加载了内部适配器的数据,它已填充但未正确填充,当我滚动它时填充项目(也是错误的)但充气时不会

class OrdersAdapter(private val context: Context) :
    RecyclerView.Adapter<BaseViewHolder<*>>() {

    private val innerAdapter by lazy { OrdersInnerAdapter(context) }

    ...

     inner class MainViewHolder(itemView: View) : BaseViewHolder<Order>(itemView) {
            override fun bind(item: Order, position: Int) {

                itemView.user_name.text = item.userName

                itemView.rv_order_items.layoutManager = LinearLayoutManager(context)
                itemView.rv_order_items.adapter = innerAdapter
                innerAdapter.setItems(item.cartList)

    }

现在这是我的内部适配器

class OrdersInnerAdapter(val context: Context):RecyclerView.Adapter<BaseViewHolder<*>>(){

    private var cartList = mutableListOf<Cart>()

 fun setItems(cartList:MutableList<Cart>){
        this.cartList = cartList
        notifyDataSetChanged()
    } 

 ....

  inner class OrdersInnerViewHolder(itemView: View):BaseViewHolder<Cart>(itemView){
        override fun bind(item: Cart, position: Int) {
            itemView.item_name.text = item.productName
            itemView.item_qty.text = "Quantity: ${item.qty}"
            itemView.item_price.text = "$${item.price.times(item.qty)}.00"
        }
    }

这是我的用例

但是内部适配器内的项目加载错误,知道吗?

【问题讨论】:

  • 加载的项目有什么问题?我的意思是它是重复旧项目还是什么?尝试为MainViewHolder中的每个项目设置一个新的OrdersInnerAdapter
  • 哇,就是这么简单!!,谢谢!

标签: android kotlin android-recyclerview android-adapter


【解决方案1】:
class OrdersAdapter(private val context: Context) :
RecyclerView.Adapter<BaseViewHolder<*>>() {

 inner class MainViewHolder(itemView: View) : BaseViewHolder<Order>(itemView) {
        override fun bind(item: Order, position: Int) {

            itemView.user_name.text = item.userName

            itemView.rv_order_items.layoutManager = LinearLayoutManager(context)
            val innerAdapter = OrdersInnerAdapter(context)
            itemView.rv_order_items.adapter = innerAdapter
            innerAdapter.setItems(item.cartList)

}

并且您不需要notifyDataSetChanged() 中的setItemsOrdersInnerAdapter。应该是

fun setItems(cartList:MutableList<Cart>){
    this.cartList = cartList // You can also move this to constructor to get rid of extra method.
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多