
- 多类型的 RecyclerView.Adapter
- 使用Databinding
import android.databinding.DataBindingUtil
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
class MultipleAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var mData: MutableList<String> = mutableListOf()
companion object {
private const val TYPE_ADD = 0
private const val TYPE_IMAGE = 1
}
override fun getItemViewType(position: Int): Int {
return if (mData.isEmpty() || position >= mData.size) {
TYPE_ADD
} else {
TYPE_IMAGE
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (TYPE_ADD == viewType) {
val binding = DataBindingUtil.inflate<ItemLayoutAddBinding>(
LayoutInflater.from(parent.context),
R.layout.item_layout_add, parent, false
)
AddHolder(binding)
} else {
val binding = DataBindingUtil.inflate<ItemLayoutImageBinding>(
LayoutInflater.from(parent.context),
R.layout.item_layout_image, parent, false
)
ImageHolder(binding)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder.itemViewType == TYPE_ADD) {
holder as AddHolder
holder.bindItem()
} else {
holder as ImageHolder
holder.bindItem(mData[position], holder.adapterPosition)
}
}
override fun getItemCount(): Int {
return mData.size + 1
}
inner class AddHolder(val binding: ItemLayoutAddBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bindItem() {
binding.tvAdd.setOnClickListener { }
binding.executePendingBindings()
}
}
inner class ImageHolder(private val binding: ItemLayoutImageBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bindItem(url: String, position: Int) {
binding.ivPhoto.setImageResource(R.mipmap.ic_launcher_round)
binding.executePendingBindings()
}
}
}