package Ġcom . ss . boilerplate . widget . rv Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ss . boilerplate . Requires Vh Layout Res Id Ċ Ċ abstract Ġclass ĠBase Rv Adapter < ItemType , ĠBinding Type Ġ: ĠView Data Binding > Ġ: ĠRecyclerView . Adapter < Base Vh < Binding Type >> (), ĊĠĠĠ ĠRequires Vh Layout Res Id Ġ{ ĊĠĠĠ Ġprotected Ġval ĠdataSet Ġ= ĠArrayList < ItemType >() ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= ĠdataSet . size ĊĠĠĠ Ġfun ĠgetItem ( position : ĠInt ) Ġ= ĠdataSet [ position ] ĊĊĠĠĠ Ġopen Ġfun Ġset Items ( new Data : ĠList < ItemType >) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSet . clear () ĊĠĠĠĠĠĠĠ ĠdataSet . addAll ( new Data ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĠBase Vh . inflate < Binding Type >( parent , Ġget Layout Res ( view Type )) Ċ } Ċ Ċ abstract Ġclass ĠDiff Cap able Rv Adapter < ItemType , ĠBinding Type Ġ: ĠView Data Binding > Ġ: ĠBase Rv Adapter < ItemType , ĠBinding Type >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġset Items ( new Data : ĠList < ItemType >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĠDiff Util . calculate Diff ( get Diff Callback ( data Set , ĠnewData )) ĊĠĠĠĠĠĠĠ ĠdataSet . clear () ĊĠĠĠĠĠĠĠ ĠdataSet . addAll ( new Data ) ĊĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġare Items The Same ( old Item : ĠItem Type , Ġnew Item : ĠItem Type ): ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġare Contents The Same ( old Item : ĠItem Type , Ġnew Item : ĠItem Type ): ĠBoolean ĊĊĠĠĠ Ġprivate Ġfun Ġget Diff Callback ( old Data : ĠList < ItemType >, ĠnewData : ĠList < ItemType >): ĠDiff Util . Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠDiff Util . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size () Ġ= Ġold Data . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size () Ġ= ĠnewData . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ) Ġ= Ġare Items The Same ( old Data [ old Item Position ], ĠnewData [ new Item Position ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ) Ġ= Ġare Contents The Same ( old Data [ old Item Position ], ĠnewData [ new Item Position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }