Skip to content

Latest commit

History

212 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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

DownloadAndroid Arsenal

Features

  • Support ViewBinding、DataBinding、DefaultBinding.
  • Multiple view types without any ViewHolder
  • Simple, flexible

Setup

implementation 'com.github.thepacific:adapter:{lastVersion}'

Usage

classMyType1(valdata:Any) : SimpleRecyclerItem()
classMyType2(valdata:Any) : SimpleRecyclerItem()
classMyType3(valdata: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

classMovieItem(valdata:Movie) : SimpleRecyclerItem() {
overridefungetLayout(): Int {
returnR.layout.item_movie
}
overridefunbind(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)
}
overridefunbindPayloads(holder:AdapterViewHolder, payloads:List<Any>?) {
}
overridefununbind(holder:AdapterViewHolder) {
}
// You may override other methods
}

Listeners

Set OnClickListener、OnLongClickListener、OnTouchListener、OnCheckedChangeListener、ImageLoader and TextWatcher

classHomeFragment : Fragment() {
privateval adapter =RecyclerAdapter()
overridefunonCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
// adapter.setOnTouchListener(OnTouchListener listener);// adapter.setOnLongClickListener(OnLongClickListener listener);// adapter.setOnCheckedChangeListener(OnCheckedChangeListener listener);
adapter.onClickListener =View.OnClickListener { v ->// AdapterUtilsval holder:AdapterViewHolder=AdapterUtils.getHolder(v)// get ViewHolderval textView = holder.itemView.findViewById<TextView>(R.id.item_poster_title)// find viewval item:MovieItem= holder.item()// get Itemval itemCount:Int= holder.itemCount// get adapter data sizeval position = holder.bindingAdapterPosition // get item position
}
// load image
adapter.imageLoader =object:AdapterImageLoader {
overridefunonImageLoad(imageView:ImageView, holder:AdapterViewHolder) {
GlideApp.with(this@HomeFragment)
.load(holder.item<MovieItem>().data.img)
.into(imageView)
}
}
// TextWatcher
adapter.textChangedListener =object:AdapterTextWatcher {
overridefunbeforeTextChanged(
v:TextView,
s:CharSequence?,
start:Int,
count:Int,
after:Int,
holder:AdapterViewHolder
) {
// AdapterUtils
}
overridefunonTextChanged(
v:TextView,
s:CharSequence?,
start:Int,
before:Int,
count:Int,
holder:AdapterViewHolder
) {
// AdapterUtils
}
overridefunafterTextChanged(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

The MIT License

About

A quick adapter library for RecyclerView, GridView, ListView, ViewPager, Spinner

Topics

Resources

Stars

370 stars

Watchers

15 watching

Forks

Releases

Packages

Used by

Contributors

Languages