package Ġde . jb amber ger . offline client . ui . components Ċ Ċ import Ġandroid . databinding . Data Binding Util Ċ import Ġandroid . databinding . ViewData Binding Ċ import Ġandroid . support . annotation . Layout Res Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġde . jb amber ger . offline client . BR Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* ĠRecyclerView Ġadapter Ġthat Ġuses ĠList Items Ġto Ġbind Ġdata Ġto Ġviews . ĠThe ĠAdapter Ġdoes Ġnot Ġsupport Ċ Ġ* Ġmulti - selection . ĠThe ĠItems Ġcan Ġhave Ġunique Ġlayouts , Ġbut Ġthe Ġdata Ġtypes Ġreturned Ġby Ġget Obj Ġand Ċ Ġ* Ġget Listener Ġmust Ġmatch Ġthe Ġlayout . Ċ Ġ* Ċ Ġ* Ġ@ author ĠJ ann ik ĠB amber ger Ġ( dev . jb amber ger @ gmail . com ) Ċ Ġ*/ Ċ Ċ class ĠData Binding Adapter Ġ: ĠRecyclerView . Adapter < Data Binding Adapter . Data Binding ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġitems : ĠList < ListItem > Ġ= ĠArrayList () ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew ĠView Ġof Ġthe Ġgiven Ġtype Ġand Ġbind s Ġit Ġto Ġa ĠViewHolder ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠĠ Ġparent Ġof Ġthe Ġnewly Ġcreated ĠView ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type Ġinteger Ġused Ġto Ġdistinguish Ġthe Ġdifferent ĠView Ġtypes ĊĠĠĠĠ Ġ* Ġ@ return ĠViewHolder Ġof Ġthe Ġnewly Ġcreated ĠView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠData Binding ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . inflate < ViewData Binding >( layout Inflater , Ġview Type , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠData Binding ViewHolder ( binding , Ġview Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind s Ġthe Ġdata Ġitem Ġat Ġposition Ġto Ġthe ĠView Ġof Ġholder ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġholder ĠĠ ĠView Ġto Ġbind Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġindex Ġof Ġthe Ġdata Ġitem ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠData Binding ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġget Obj For Position ( position ) ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġget Listener For Position ( position ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( obj , Ġlistener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġview Ġtype Ġof Ġthe Ġdata Ġitem Ġat Ġthe Ġgiven Ġposition ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġindex Ġof Ġthe Ġdata Ġitem ĊĠĠĠĠ Ġ* Ġ@ return Ġview Ġtype Ġrequired Ġfor Ġthe Ġdata Ġitem Ġat Ġthe Ġgiven Ġposition ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Layout Id For Position ( position ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Items ( items : ĠList < ListItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . items Ġ= Ġitems ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Obj For Position ( position : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. obj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Listener For Position ( position : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Layout Id For Position ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. layout Res ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠViewHolder Ġclass Ġcontaining Ġa Ġreference Ġto Ġthe ĠView Data Binding Ġof Ġthe Ġassociated Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠData Binding ViewHolder ( val Ġbinding : ĠView Data Binding , Ġ@ param : Layout Res Ġ@ field : Layout Res ĊĠĠĠ Ġprivate Ġval Ġview Type : ĠInt ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ), ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġexpanded Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBind s Ġthe Ġdata Ġobj Ġand Ġevent Ġlistener Ġto Ġthe ĠView . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġobj ĠĠĠĠĠ Ġdata Ġobj ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlistener Ġevent Ġlistener ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( obj : ĠAny ?, Ġlistener : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . obj , Ġobj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . listener , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpanded Ġ= Ġ! expanded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ