Skip to content

Instantly share code, notes, and snippets.

@androidcodehunter
Created July 18, 2019 15:49
Show Gist options
  • Save androidcodehunter/7df37af00cd2ba7e96869c2fdeb8e7f6 to your computer and use it in GitHub Desktop.
Save androidcodehunter/7df37af00cd2ba7e96869c2fdeb8e7f6 to your computer and use it in GitHub Desktop.
Kotlin ListAdapter With DiffUtils
package sharif.vocapower.ui.adapter
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.*
import kotlinx.android.synthetic.main.item_primary_word_list.view.*
import kotlinx.android.synthetic.main.list_item_mnemonic.view.*
import sharif.vocapower.R
import sharif.vocapower.data.db.entity.Mnemonic
import sharif.vocapower.data.db.entity.Word
class WordDetailAdapterKotlin : ListAdapter<Word, WordDetailAdapterKotlin.ViewHolder>(WordNameDiffCallback()) {
private var mnemonics: List<Mnemonic>? = ArrayList()
private var mCurrentPosition : Int = 0
fun addMnemonic(mnemonicList: List<Mnemonic>, position: Int){
mCurrentPosition = position
mnemonics = mnemonicList
notifyItemChanged(position)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ViewHolder(inflater.inflate(R.layout.item_primary_word_list, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position), mnemonics)
}
inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
private var mnemonicAdapterKotlin = MnemonicAdapterKotlin()
init {
itemView.rv_mnemonic.setHasFixedSize(true)
itemView.rv_mnemonic.itemAnimator = DefaultItemAnimator()
itemView.rv_mnemonic.layoutManager = LinearLayoutManager(itemView.context)
itemView.rv_mnemonic.adapter = mnemonicAdapterKotlin
}
fun bind(word: Word, mnemonics: List<Mnemonic>?) {
Log.d("TEC", "adapter position $adapterPosition and current position $mCurrentPosition")
itemView.tv_word.text = word.name
itemView.tv_meaning.text = word.meaning
itemView.tv_bangla_meaning.text = word.meaningBangla
itemView.tv_hindi_meaning.text = word.meaningHindi
if (adapterPosition == mCurrentPosition){
mnemonicAdapterKotlin.submitList(mnemonics)
}else{
}
}
}
class WordNameDiffCallback : DiffUtil.ItemCallback<Word>() {
override fun areItemsTheSame(oldItem: Word, newItem: Word): Boolean {
return oldItem.name == newItem.name
}
override fun areContentsTheSame(oldItem: Word, newItem: Word): Boolean {
return oldItem.name == newItem.name && oldItem.isFavorite == newItem.isFavorite
}
}
}
class MnemonicAdapterKotlin : ListAdapter<Mnemonic, MnemonicAdapterKotlin.ViewHolder>(MnemonicDiffUtilCallback()){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return MnemonicAdapterKotlin.ViewHolder(inflater.inflate(R.layout.list_item_mnemonic, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(mnemonic: Mnemonic?) {
itemView.tv_mnemonic.text = mnemonic?.mnemonic
///itemView.tv_mnemonic_user.text = "By " + mnemonic?.uname
}
}
class MnemonicDiffUtilCallback : DiffUtil.ItemCallback<Mnemonic>() {
override fun areItemsTheSame(oldItem: Mnemonic, newItem: Mnemonic): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Mnemonic, newItem: Mnemonic): Boolean {
return oldItem.mnemonic == newItem.mnemonic
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment