Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

hwt77/adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

212 Commits

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

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

The MIT License

About

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

Topics

Resources

Readme

Stars

Watchers

Forks

Packages

Contributors