Adapter
A quick adapter library for RecyclerView, GridView, ListView, ViewPager, Spinner
Install / Use
/learn @hwt77/AdapterREADME
Adapter
A quick adapter library for RecyclerView, GridView, ListView, ViewPager, Spinner. It abstracts the boilerplate of item view types, item layouts, viewholders, span sizes , and more, in order to simplify building complex screens with multiple view types.
If you are using version 2.x please check here

Features
- Support ViewBinding、DataBinding、DefaultBinding.
- Multiple view types without any ViewHolder
- Simple, flexible
Setup
implementation 'com.github.thepacific:adapter:{lastVersion}'
Usage
class MyType1(val data: Any) : SimpleRecyclerItem()
class MyType2(val data: Any) : SimpleRecyclerItem()
class MyType3(val data: Any) : SimpleRecyclerItem()
val adapter = RecyclerAdapter()
adapter.onClickListener = View.OnClickListener { }
adapter.imageLoader = adapter.imageLoader = object : AdapterImageLoader {}
val item1 = MyType1(Any())
val list2 = mutableListOf<MyType2>()
val list3 = mutableListOf<MyType3>()
adapter.add(item1)
adapter.addAll(list2.toList())
adapter.addAll(list3.toList())
Item
Extend SimpleRecylcerItem. Optionally, you may implement RecyclerItem
class MovieItem(val data: Movie) : SimpleRecyclerItem() {
override fun getLayout(): Int {
return R.layout.item_movie
}
override fun bind(holder: AdapterViewHolder) {
val binding = holder.binding(ItemMovieBinding::bind)
binding.itemPosterTitle.text = data.name
binding.itemPosterRunningTime.text = data.showTime
// attach UI listeners
holder.attachOnClickListener(R.id.item_poster_post)
holder.attachOnLongClickListener(R.id.item_poster_post)
holder.attachOnCheckedChangeListener(R.id.item_poster_post)
holder.attachOnTouchListener(R.id.item_poster_post)
holder.attachImageLoader(R.id.item_poster_post)
holder.attachTextChangedListener(R.id.item_poster_post)
holder.detachTextChangedListener(R.id.item_poster_post)
}
override fun bindPayloads(holder: AdapterViewHolder, payloads: List<Any>?) {
}
override fun unbind(holder: AdapterViewHolder) {
}
// You may override other methods
}
Listeners
Set OnClickListener、OnLongClickListener、OnTouchListener、OnCheckedChangeListener、ImageLoader and TextWatcher
class HomeFragment : Fragment() {
private val adapter = RecyclerAdapter()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// adapter.setOnTouchListener(OnTouchListener listener);
// adapter.setOnLongClickListener(OnLongClickListener listener);
// adapter.setOnCheckedChangeListener(OnCheckedChangeListener listener);
adapter.onClickListener = View.OnClickListener { v ->
// AdapterUtils
val holder: AdapterViewHolder = AdapterUtils.getHolder(v)// get ViewHolder
val textView = holder.itemView.findViewById<TextView>(R.id.item_poster_title)// find view
val item: MovieItem = holder.item()// get Item
val itemCount: Int = holder.itemCount// get adapter data size
val position = holder.bindingAdapterPosition // get item position
}
// load image
adapter.imageLoader = object : AdapterImageLoader {
override fun onImageLoad(imageView: ImageView, holder: AdapterViewHolder) {
GlideApp.with(this@HomeFragment)
.load(holder.item<MovieItem>().data.img)
.into(imageView)
}
}
// TextWatcher
adapter.textChangedListener = object : AdapterTextWatcher {
override fun beforeTextChanged(
v: TextView,
s: CharSequence?,
start: Int,
count: Int,
after: Int,
holder: AdapterViewHolder
) {
// AdapterUtils
}
override fun onTextChanged(
v: TextView,
s: CharSequence?,
start: Int,
before: Int,
count: Int,
holder: AdapterViewHolder
) {
// AdapterUtils
}
override fun afterTextChanged(v: TextView, s: Editable, holder: AdapterViewHolder) {
// AdapterUtils
}
}
}
}
Others
data set changed callback , it's useful to show or hide empty view
adapter.setOnDataSetChanged(OnDataSetChanged onDataSetChanged);
License
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.7kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
