package Ġcom . aid an v ii . toolbox . adapter views . databinding . recycler pager Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . aid an v ii . toolbox . adapter views . databinding . Bind able Adapter Ċ import Ġcom . aid an v ii . toolbox . adapter views . databinding . Bind able Adapter Delegate Ċ import Ġcom . aid an v ii . toolbox . adapter views . databinding . Bind able Adapter Item Ċ import Ġcom . aid an v ii . toolbox . adapter views . databinding . Binding Inflater Ċ import Ġcom . aid an v ii . toolbox . adapter views . recycler pager . Recycler Pager Adapter Ċ import Ġcom . aid an v ii . toolbox . databinding . Int Binding Consumer Ċ import Ġkotlinx . android . parcel . Parcel ize Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġ[ Recycler Pager Adapter ] Ġand Ġ[ Bind able Adapter ] Ġthat Ġcan Ġautomatically Ġbind Ġa Ġlist Ġof Ġtype Ġ[ Bind able Adapter Item ]. Ċ Ġ* Ċ Ġ* ĠSub class ing Ġthis Ġis Ġpure ly Ġoptional , Ġsee Ġ[ Binding Recycler Pager Binder ] Ġfor Ġusage Ġwith Ġa Ġsubclass . Ċ Ġ*/ Ċ open Ġclass ĠBinding Recycler Pager Adapter < Item Ġ: ĠBind able Adapter Item >( ĊĠĠĠ Ġbuilder : ĠBuilder < Item >, ĊĠĠĠ Ġitem Pool Container : ĠItem Pool Container < Binding Recycler Pager Item ViewHolder < *, ĠItem >> Ġ= Ġitem Pool Container () Ċ ) Ġ: ĠRe cycler Pager Adapter < Item , ĠBinding Recycler Pager Item ViewHolder < *, ĠItem >>( item Pool Container ), ĊĠĠĠ ĠBind able Adapter < Item , ĠBinding Recycler Pager Item ViewHolder < *, ĠItem >> Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< Item Ġ: ĠBind able Adapter Item > Ġitem Pool Container () Ġ= ĠItem Pool Container < Binding Recycler Pager Item ViewHolder < *, ĠItem >>() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder < Item Ġ: ĠBind able Adapter Item > Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġdelegate : ĠBind able Adapter Delegate < Item , ĠBinding Recycler Pager Item ViewHolder < *, ĠItem >>, ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġview Type Handler : ĠBind able Adapter . ViewType Handler < Item >, ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġbinding Inflater : ĠBinding Inflater , ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġare Item And Contents The Same : Ġ(( old : ĠItem , Ġnew : ĠItem ) Ġ-> ĠBoolean ), ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġapplication Context : ĠContext ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdelegate Ġ= Ġbuilder . delegate . also Ġ{ Ġit . bind able Adapter Ġ= Ġthis Ġ} ĊĠĠĠ Ġprivate Ġval Ġare Item And Contents The Same Ġ= Ġbuilder . are Item And Contents The Same ĊĠĠĠ Ġoverride Ġval Ġview Type Handler Ġ= Ġbuilder . view Type Handler . also Ġ{ Ġit . init Bind able Adapter ( this ) Ġ} ĊĠĠĠ Ġoverride Ġval Ġbinding Inflater Ġ= Ġbuilder . binding Inflater ĊĠĠĠ Ġoverride Ġvar Ġitem Bound Listener : ĠInt Binding Consumer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġresources : ĠResources Ġ= Ġbuilder . application Context . resources ĊĠĠĠ Ġinternal Ġvar Ġpending Saved State : ĠSaved State ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġvar Ġitems Ġ= Ġempty List < Item >() ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Back Of ( old Items Ġ= Ġfield , Ġnew Items Ġ= Ġvalue ). also Ġ{ Ġchange Callback Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed ( change Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠItem Ġ= Ġsuper . getItem ( position ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠgetItem Position ( item : ĠItem ): ĠInt Ġ= Ġsuper < Bind able Adapter >. getItem Position ( item ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠgetItem ViewType ( adapter Position : ĠInt ) Ġ= Ġview Type Handler . getItem ViewType ( adapter Position ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ĊĠĠĠ Ġ): ĠBinding Recycler Pager Item ViewHolder < *, ĠItem > Ġ= ĊĠĠĠĠĠĠĠ Ġdelegate . onCreate ( container , Ġview Type ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġcreate With ( ĊĠĠĠĠĠĠĠ Ġbinding ResourceId : ĠInt , ĊĠĠĠĠĠĠĠ Ġview Data Binding : ĠView Data Binding ĊĠĠĠ Ġ): ĠBinding Recycler Pager Item ViewHolder < *, ĠItem > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBinding Recycler Pager Item ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ResourceId Ġ= Ġbinding ResourceId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding Ġ= Ġview Data Binding ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠBinding Recycler Pager Item ViewHolder < *, ĠItem >, ĊĠĠĠĠĠĠĠ Ġadapter Position : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . on Bind ( view Holder , Ġadapter Position , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Un bind ViewHolder ( ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠBinding Recycler Pager Item ViewHolder < *, ĠItem >, ĊĠĠĠĠĠĠĠ Ġadapter Position : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . on Un bind ( view Holder , Ġadapter Position , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Destroy ViewHolder ( ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠBinding Recycler Pager Item ViewHolder < *, ĠItem >, ĊĠĠĠĠĠĠĠ Ġadapter Position : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . on Destroy ( view Holder , Ġadapter Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Page Title ( position : ĠInt ): ĠCharSequence Ġ= ĊĠĠĠĠĠĠĠ Ġitems [ position ]. run Ġ{ Ġif Ġ( item Title Res Ġ!= Ġ 0 ) Ġresources . getString ( item Title Res ) Ġelse Ġitem Title Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġget Count (): ĠInt Ġ= Ġitems . size ĊĊĠĠĠ Ġprivate Ġfun Ġcall Back Of ( old Items : ĠList < Item >, Ġnew Items : ĠList < Item >): ĠOn DataSet Changed Callback < Item > Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn DataSet Changed Callback < Item > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New Adapter Position Of Item ( item : ĠItem ): ĠInt Ġ= Ġnew Items . indexOf ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old Item At ( old Adapter Position : ĠInt ): ĠItem Ġ= Ġold Items [ old Adapter Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New Item At ( new Adapter Position : ĠInt ): ĠItem Ġ= Ġnew Items [ new Adapter Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠItem , Ġnew Item : ĠItem ) Ġ= Ġare Item And Contents The Same . invoke ( old Item , Ġnew Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave State (): ĠSaved State ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . save State () ĊĠĠĠĠĠĠĠ Ġreturn ĠSaved State ( restore d Position Ġ= Ġcurrent Position Ġ?: Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestore State ( state : ĠParcel able ?, Ġloader : ĠClassLoader ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Saved State Ġ= Ġstate Ġas ? ĠSaved State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġdata Ġclass ĠSaved State ( val Ġrestored Position : ĠInt ) Ġ: ĠParcel able Ċ }