RecyclerView внутри RecyclerView отображает неверные данные - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть адаптер, в котором хранится другой обзор повторного использования, когда я загружаю данные в этот адаптер, я также загружаю данные для внутреннего адаптера, он заполняется, но не заполняется правильно, когда я прокручиваю его, он заполняет элементы (также неправильно) но при надувании не

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"
        }
    }

Это мой вариант использования

enter image description here

Но элементы во внутреннем адаптере загружены неправильно, вы понимаете?

1 Ответ

1 голос
/ 09 апреля 2020
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() в setItems из OrdersInnerAdapter. Это было бы

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