【问题标题】:onBindViewHolder not called when use data binding on RecyclerView在 RecyclerView 上使用数据绑定时未调用 onBindViewHolder
【发布时间】:2019-06-23 06:48:13
【问题描述】:

在 Recyclerview 上使用数据绑定时未调用 onBindViewHolder。 因此,Activity 显示空白屏幕。

当我在 logcat 上看到时,列表大小和 itemCount 为 20,但从未调用过 onBindViewHolder 方法。

class NewsAdapter : RecyclerView.Adapter<NewsAdapter.ViewHolder>() {

    private val listArticle = mutableListOf<Article>()

    fun update(list: List<Article>) {
        listArticle.addAll(list)
        notifyDataSetChanged()
    }

    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): NewsAdapter.ViewHolder {
        return ViewHolder(viewGroup)
    }

    class ViewHolder(
            private val parent: ViewGroup,
            private val binding: AdapterNewsBinding = DataBindingUtil.inflate(
                    LayoutInflater.from(parent.context),
                    R.layout.adapter_news,
                    parent,
                    false
            )
    ) : RecyclerView.ViewHolder(binding.root) {
        fun bind(article: Article) {
            binding.article = article
        }
    }

    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
        Log.d("NewsAdapter", "onBindViewHolder")
        viewHolder.bind(listArticle[position])
    }

    override fun getItemCount() = listArticle.size
}

如何在 Recyclerview 中通过数据绑定调用 onBindViewHolder? 这样我就可以在 Activity 上显示数据了。

【问题讨论】:

    标签: android mvvm data-binding android-recyclerview android-livedata


    【解决方案1】:

    解决了

    1. 在您的应用程序 gradle 中添加应用插件:'kotlin-kapt'
    2. 因此,您可以在适配器上创建这样的静态方法
    companion object {
            @BindingAdapter("items")
            @JvmStatic
            fun RecyclerView.bindItems(items: List<Article>?) {
                val adapter = adapter as NewsAdapter
                if (!items.isNullOrEmpty()) adapter.update(items)
            }
        }
    

    完成

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      相关资源
      最近更新 更多