Adapter

General

Category
Free
Tag
View Adapters
License
N/A
Min SDK
7 (Android 2.1 Eclair)
Registered
Apr 16, 2016
Favorites
7
Link
https://github.com/thepacific/adapter
See also
EasyAdapter
ClearRecyclerAdapter
OneAdapter
aaaah
FastAdapter

Additional

Language
Kotlin
Version
3.0.3 (Sep 11, 2020)
Created
Mar 9, 2016
Updated
Jul 16, 2021 (Retired)
Owner
thepacific
Contributors
Brendan Kirby (brendankirby)
UsherBaby
blackberry2016
3
Activity
Badge
Generate
Download
Source code

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