Skip to content

customized RecyclerView.Adapter & PagedListAdapter for an easy use.

Notifications You must be signed in to change notification settings

clickapps-android/app-adapter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

app-adapter

Release

App-adapter is an easy,flexible library for you Android customized RecyclerView.Adapter & PagedListAdapter for an easy use. you can use it directally inside you Activity/Fragment or in a separate class.just create you item design and use it safely,faster along with views cache.

add dependence

in project level build.gradle

allprojects {
  repositories {
                  google()
                  jcenter()
                    //...
                  maven { url 'https://jitpack.io' }
  }
}

in app level build.gradle

dependencies {

        implementation 'com.github.clickapps-android:app-adapter:1.0.1'
}

#How to Ues

here is some examples...to name a few

way 1

using apply plugin: 'kotlin-android-extensions'

just create your ViewHolder class anywhere inside your Activity/Fragment.

class MainActivity : AppCompatActivity() {

  ...

  recycler.adapter = AppAdapter<String>(R.layout.item, MVH::class.java).also {
            it.list = listOf("One", "Two", "Three")
  }

  ...

  class MVH(override val containerView: View) : AppViewHolder(containerView), LayoutContainer {
      override fun onBind(position: Int) {
          itemTVOne.text = "item MVH: $position"
      }

  }

}

Way 2

you should use get<VIEW_TYPE>(view_id) to access your view faster & safely

recycler.adapter = AppAdapter<String>(R.layout.item) {
    //onBind
    get<TextView>(R.id.itemTVOne).text = "item with onBind you: $it"
}.also {
    it.list = listOf("One", "Two", "Three")
}

Way 3

useing separate ViewHolder class

class AppAdapterTwo : AppAdapter<String>({ parent, viewType ->
  val vv = parent.appInflate(R.layout.item)
  object : AppViewHolder(vv) {
      override fun onBind(position: Int) {
          get<TextView>(R.id.itemTVTwo).text = "AppAdapterTwo: $position"
      }
  }
})

then in your Activity/Fragment/View.

recycler.adapter = AppAdapterTwo().also {
    it.list = listOf("One", "Two", "Three")
}

Way 4

using apply plugin: 'kotlin-android-extensions' using extends

class AppAdapterThree : AppAdapter<String>() {


    class MyViewHolder(override val containerView: View):AppViewHolder(containerView),LayoutContainer{
        override fun onBind(position: Int) {
            itemTVOne.text = "item AppAdapterThree: $position"
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppViewHolder {
        return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item,parent,false))
    }


}
recycler.adapter = AppAdapterThree().also {
    it.list = listOf("One", "Two", "Three")
}

Way 5

recycler.adapter = AppAdapter<String> { parent, viewType ->
    val vv = parent.appInflate(R.layout.item)
    return@AppAdapter object : AppViewHolder(vv) {
        override fun onBind(position: Int) {
            get<TextView>(R.id.itemTVOne).text = "recycler.adapter: $position"
        }
    }
}.also {
    it.list = listOf("One", "Two", "Three")
}

Way 6

using multi view types

recycler.adapter = AppAdapter<String>({ pos ->
    return@AppAdapter when (pos) {
        0 -> R.layout.item
        1 -> R.layout.item2
        else -> R.layout.item3
    }
}) { parent, viewType ->

    when (viewType) {
        R.layout.item -> {
            val vv = parent.appInflate(R.layout.item)
            object : AppViewHolder(vv) {
                override fun onBind(position: Int) {
                    get<TextView>(R.id.itemTVOne).text = "recycler.adapter1: $position"
                }
            }
        }
        R.layout.item2 -> {
            val vv = parent.appInflate(R.layout.item2)
            object : AppViewHolder(vv) {
                override fun onBind(position: Int) {
                    get<TextView>(R.id.item2TVOne).text = "recycler.adapter2: $position"
                }
            }
        }
        else -> {
            val vv = parent.appInflate(R.layout.item3)
            object : AppViewHolder(vv) {
                override fun onBind(position: Int) {
                    get<TextView>(R.id.item3TVOne).text = "recycler.adapter3: $position"
                }
            }
        }
    }

}.also {
    it.list = listOf("One", "Two", "Three", "four", "five", "six", "seven")
}

Way 7

using multi view types,views id must be unique from each other

recycler.adapter = AppAdapter<String>({ pos ->
    return@AppAdapter when (pos) {
        0 -> R.layout.item
        1 -> R.layout.item2
        else -> R.layout.item3
    }
}) { parent, viewType ->
    val vv = parent.appInflate(viewType)
    object : AppViewHolder(vv) {
        override fun onBind(position: Int) {
            when (viewType) {
                R.layout.item -> {
                    get<TextView>(R.id.itemTVOne).text = "recycler.adapter1: $position"
                }
                R.layout.item2 -> {
                    get<TextView>(R.id.item2TVOne).text = "recycler.adapter2: $position"
                }
                R.layout.item3 -> {
                    get<TextView>(R.id.item3TVOne).text = "recycler.adapter3: $position"
                }
            }
        }
    }
}.also {
    it.list = listOf("One", "Two", "Three", "four", "five", "six", "seven")
}

PagedListAdapter

//create your DiffUtil.ItemCallback
val diff = object : DiffUtil.ItemCallback<String>() {
    override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
        return false
    }

    override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
        return false
    }

}
//your adapter here
val adapter = AppPagedListAdapter(diff, { p, vType ->
    //onCreateVH
    val v = p.appInflate(R.layout.item)
    return@AppPagedListAdapter object : AppViewHolder(v) {
        override fun onBind(position: Int) {
            get<TextView>(R.id.itemTVOne).text = "..."
        }

    }
})
recycler.adapter = adapter

PagedListAdapter with multi view types

//create your DiffUtil.ItemCallback
val diff = object : DiffUtil.ItemCallback<String>() {
    override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
        return false
    }

    override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
        return false
    }

}
//your adapter here
val adapter2 = AppPagedListAdapter(diff,
    { pos: Int ->
        return@AppPagedListAdapter when (pos) {
            0 -> R.layout.item
            1 -> R.layout.item2
            else -> R.layout.item3
                
        }
    }
    , { p, vType ->
        //onCreateVH
        val v = p.appInflate(vType)
        return@AppPagedListAdapter object : AppViewHolder(v) {
            override fun onBind(position: Int) {
                when(vType){
                    R.layout.item -> {get<TextView>(R.id.itemTVOne).text = "..1.."}
                    R.layout.item2 -> {get<TextView>(R.id.item2TVOne).text = "..2.."}
                    R.layout.item3 -> {get<TextView>(R.id.item3TVOne).text = "..3.."}
                }

            }

        }
    })
recycler.adapter = adapter

Enjoy using app-adapter library,report any bugs you found, or even drop me an email gg.goo.mobile@gmail.com

About

customized RecyclerView.Adapter & PagedListAdapter for an easy use.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages