如何改进RecyclerView适配器,这是一个好的实践吗?我想知道如何改进这个问题

问题描述 投票:0回答:1

如何改进 RecyclerView Adapter,这是一个好的实践吗?

我实现了一个 RecyclerView 适配器来显示新闻文章列表。我正在寻找有关如何改进此代码以及它是否遵循 Android 开发最佳实践的建议。这是适配器代码:

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

    private object NewsDiffUtil : DiffUtil.ItemCallback<Article>() {
        override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
            return oldItem == newItem
        }
    }
    val differ = AsyncListDiffer(this, NewsDiffUtil)

    inner class ArticleViewHolder(val binding: ItemArticleBinding) :
        RecyclerView.ViewHolder(binding.root)


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArticleViewHolder {
        return ArticleViewHolder(
            ItemArticleBinding.inflate(
                LayoutInflater.from(parent.context), parent, false
            )
        )
    }
    override fun getItemCount(): Int {
        return differ.currentList.size
    }

    override fun onBindViewHolder(holder: ArticleViewHolder, position: Int) {
        val article = differ.currentList[position]
        Glide.with(holder.itemView).load(article.urlToImage).into(holder.binding.ivArticleImage)
        holder.binding.tvSource.text = article.title
        holder.binding.tvTitle.text = article.title
        holder.binding.tvDescription.text = article.description
        holder.binding.tvPublishedAt.text = article.publishedAt
        holder.itemView.setOnClickListener {
            onItemClickListener?.let {
                it(article)
            }
        }
    }

    private var onItemClickListener: ((Article) -> Unit)? = null
    fun setOnClickListener(listener: (Article) -> Unit) {
        onItemClickListener = listener
    }
}
android adapter
1个回答
0
投票
  • 使用ListAdapter
  • 使用 Glid 中的 requestmanager 并将其传递给适配器。
  • 不要在绑定上设置点击侦听器,而是在视图保持器上设置一次并使用回调。
© www.soinside.com 2019 - 2024. All rights reserved.