小编Ani*_*ora的帖子

java.lang.IndexOutOfBoundsException:检测到不一致。使用 DiffUtil 时视图持有者适配器无效

下面是一个适配器类,用于在回收站视图中加载所有书籍项目。使用 DiffUtils 以便不会通知整个列表。


class BooksAdapter(var mContext: Context) : RecyclerView.Adapter<BooksAdapter.BooksViewHolder>() {

    var books: List<BookTable> = ArrayList()
        set(value) {
            val result = DiffUtil.calculateDiff(BookListDiffCallBacks(ArrayList(value), ArrayList(books)))
            field = value
            result.dispatchUpdatesTo(this)
        }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BooksViewHolder {
        val binding = DataBindingUtil.inflate<ItemBookBinding>(LayoutInflater.from(mContext), R.layout.item_book, parent, false)
        return BooksViewHolder(binding)
    }

    override fun getItemCount(): Int {
        return books.size
    }

    override fun onBindViewHolder(holder: BooksViewHolder, position: Int) {
        holder.setData(books[position])
    }

    inner class BooksViewHolder(var binding: ItemBookBinding) : RecyclerView.ViewHolder(binding.root) {
        fun setData(bookTable: BookTable) {
            binding.book = bookTable
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

android adapter kotlin android-recyclerview android-diffutils

1
推荐指数
1
解决办法
828
查看次数