Created
July 18, 2019 15:49
-
-
Save androidcodehunter/7df37af00cd2ba7e96869c2fdeb8e7f6 to your computer and use it in GitHub Desktop.
Kotlin ListAdapter With DiffUtils
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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