package Ġme . to pt as . architecture . base Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ abstract Ġclass ĠBase ListAdapter < T , Ġin ĠDB Ġ: ĠView Data Binding > Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Base ListAdapter < T , ĠDB >. Base ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġitems : ĠList < T >? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġon Item Click : Ġ( T ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġvar Ġon Item Position Click : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{} ĊĊĠĠĠ Ġabstract Ġfun Ġlayout Resource (): ĠInt ĊĊĠĠĠ Ġabstract Ġfun Ġbinding Variable Id (): ĠInt ĊĊĠĠĠ Ġ// ĠTODO : ĠDiff Util Ġcan Ġbe Ġused Ġhere ĊĠĠĠ Ġfun Ġset Items ( new List : ĠList < T > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġnew List ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Items () Ġ= Ġitems ĊĊĠĠĠ Ġopen Ġfun Ġbind ( holder : ĠBase ViewHolder , Ġitem : ĠT ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . inflate < DB >( layout Inflater , Ġlayout Resource (), Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBase ViewHolder ( binding , Ġbinding Variable Id ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! items . isNull OrEmpty () Ġ&& Ġposition Ġ< Ġitems !!. size ) Ġitems ! ![ position ] Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġholder . bind ( item ) ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ Ġon Item Click ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Position Click ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbind ( holder , Ġitem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems ?. size Ġ?: Ġ 0 ĊĊĊĠĠĠ Ġinner Ġclass ĠBase ViewHolder ( val Ġbinding : ĠView Data Binding , Ġprivate Ġval Ġvariable Id : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . set Variable ( variable Id , Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }