首页 > 解决方案 > 两个 ViewHolders 一个 Adapter

问题描述

我有两个不同的片段RecyclerViews,我为片段制作了两个ViewHolders片段:

class RecyclerOneViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
    val title = itemView.list_tv
    val image = itemView.list_img
}

class RecyclerTwoViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
    val title = itemView.tv_card
    val image = itemView.iv_card
    val date = itemView.tv_card_date
}

我有我的适配器,但只有第一个ViewHolder。我可以为两者分享吗?如何?

class RecyclerAdapter(val movies: List<Movie>):
RecyclerView.Adapter<RecyclerOneViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerOneViewHolder {
    var itemView = LayoutInflater.from(parent.context).inflate(
        R.layout.layout_list, parent, false)
    return RecyclerOneViewHolder(itemView)
}

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

override fun onBindViewHolder(holderOne: RecyclerOneViewHolder, position: Int) {
    holderOne.title.text = movies.get(position).title
    Picasso.get().load("https://image.tmdb.org/t/p/original"+movies.get(position).img)
        .into(holderOne.image)
}

override fun getItemViewType(position: Int): Int {
    return super.getItemViewType(position)
}

标签: javaandroidlistkotlinadapter

解决方案


你应该改变这个:

class RecyclerAdapter(val movies: List<Movie>): RecyclerView.Adapter<RecyclerOneViewHolder>()

对此:

class RecyclerAdapter(val movies: List<Movie>): RecyclerView.Adapter<RecyclerView.ViewHolder>()

并且您可以将 viewholder 转换为您的 viewholder,但您也需要实现getItemViewType()方法。


推荐阅读