Skip to content

Instantly share code, notes, and snippets.

@JichunMa
Last active May 7, 2020 08:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JichunMa/61358877dfb77a805bc770049ee45f16 to your computer and use it in GitHub Desktop.
Save JichunMa/61358877dfb77a805bc770049ee45f16 to your computer and use it in GitHub Desktop.
GeneralAdapter
package com.example.learnkotlin
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
/**
* Created on 2020/4/29.
* 通用的 GeneralAdapter
*
*/
open abstract class GeneralAdapter<T>(
private val context: Context,
private val layoutResId: Int,
private val data: List<T>,
private val refresher: (View, T) -> Unit
) : RecyclerView.Adapter<GeneralAdapter.MyViewHolder<T>>() {
var onClickListener: OnClickListener<T>? = null
class MyViewHolder<T>(
itemView: View,
private val onClickListener: OnClickListener<T>?,
val refresher: (View, T) -> Unit
) :
RecyclerView.ViewHolder(itemView) {
fun refreshView(data: T) {
itemView.setOnClickListener(View.OnClickListener {
onClickListener?.onClick(
itemView,
data
)
})
refresher(itemView, data)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder<T> {
val view = LayoutInflater.from(context).inflate(layoutResId, parent, false)
return MyViewHolder(view, onClickListener, refresher)
}
override fun getItemCount(): Int {
return if (data.isNullOrEmpty()) 0 else data.size
}
override fun onBindViewHolder(holder: MyViewHolder<T>, position: Int) {
holder.refreshView(data[position])
}
interface OnClickListener<T> {
fun onClick(view: View, data: T): Unit
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment