我有 3 个相似的适配器,我想将它们合并为 1 个。唯一不同的是 ArrayList 类型。我有 2 个房间实体,即 room、FavoriteArticle 和 HistoryArticle,但它们具有与 WikiPage 相同的字段。
class Adapter<T> (@LayoutRes private val layoutRes: Int) : RecyclerView.Adapter<Holder>() {
val currentResult: ArrayList<T> = ArrayList()
override fun getItemCount() = currentResult.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val cardItem = LayoutInflater.from(parent.context).inflate(layoutRes, parent, false)
return Holder(cardItem)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
val page = currentResult[position]
holder.updateWithPage(page)
}
fun add(wiki: ArrayList<T>?) { {
currentResult.clear()
if (wiki != null) {
currentResult.addAll(wiki)
}
}
}
持有者类别:
class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val articleImageView: ImageView = itemView.findViewById(R.id.articleCardItemImage)
private val titleTextView: TextView = itemView.findViewById(R.id.articleCardItemTitle)
private lateinit var currentPage: WikiPage
init {
itemView.setOnClickListener {
itemView.context.startActivity(ArticleDetailActivity.createStartIntent(itemView.context, currentPage))
}
}
fun updateWithPage(page: WikiPage) {
currentPage = page
titleTextView.text = page.title
Picasso.get().load(page.thumbnail.source).into(articleImageView)
}
}
我不知道如何使用泛型从 onBindViewHolder 修改 updateWithPage 函数。我怎样才能做到这一点?
最佳答案
使用Interface
的一些想法供您引用:
interface Article {
getWikiPage(): WikiPage
}
class FavoriteArticle : Article {
getWikiPage() = wikiPage
}
class HistoryArticle: Article {
getWikiPage() = wikiPage
}
// Adapter
class Adapter<Article>
...
override fun onBindViewHolder(holder: Holder, position: Int) {
val page = currentResult[position].getWikiPage()
holder.updateWithPage(page)
}
...
关于android - 如何在 Kotlin 中创建通用适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59071356/