/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠImage ĠP icker Ċ Ġ* ĠAuthor : ĠN af is ĠIsl am ĠK ab bo Ġ< k ab bo andre ign s @ gmail . com > Ċ Ġ*/ Ċ Ċ package Ġcom . k abb ode v . image picker . base Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ /** Ċ Ġ* Ġ@ param Ġdata Binding ĠThe ĠItem ĠLayout ĠFile ĠData ĠBinding Ċ Ġ* Ġ@ param ĠT Ġdata Ġclass Ġof Ġlist Ċ Ġ*/ Ċ abstract Ġclass ĠBase Adapter < data Binding Ġ: ĠView Data Binding , ĠT > Ġ: ĠRecyclerView . Adapter < Base Adapter < data Binding , ĠT >. My ViewHolder >() Ġ{ ĊĊĊĠĠĠ Ġabstract Ġfun Ġget Layout Binding ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?): Ġdata Binding ĊĊĠĠĠ Ġabstract Ġfun Ġget Differ (): ĠAsync List Differ < T > ĊĊĠĠĠ Ġabstract Ġfun Ġare Items Same ( old Item : ĠT , Ġnew Item : ĠT ): ĠBoolean ĊĊĠĠĠ Ġabstract Ġfun Ġare Contents Same ( old Item : ĠT , Ġnew Item : ĠT ): ĠBoolean ĊĊĠĠĠ Ġabstract Ġfun Ġbind View ( holder : ĠMy ViewHolder , Ġitem : ĠT ) ĊĊĊĠĠĠ Ġfun Ġget Diff Util Callback (): ĠDiff Util . Item Callback < T > Ġ= Ġdiff Util CallBack ĊĊĠĠĠ Ġfun Ġupdate List ( updated : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( updated . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Differ (). submit List ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Differ (). submit List ( updated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Item ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠArrayList < T > Ġ= ĠArrayList ( get Differ (). current List ) ĊĠĠĠĠĠĠĠ Ġlist . add ( item ) ĊĊĠĠĠĠĠĠĠ Ġupdate List ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item ( pos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠArrayList < T > Ġ= ĠArrayList ( get Differ (). current List ) ĊĠĠĠĠĠĠĠ Ġlist . remove At ( pos ) ĊĊĠĠĠĠĠĠĠ Ġupdate List ( list ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġdiff Util CallBack Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < T >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠT , Ġnew Item : ĠT ): ĠBoolean Ġ= Ġare Items Same ( old Item , Ġnew Item ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠT , Ġnew Item : ĠT ): ĠBoolean Ġ= Ġare Contents Same ( old Item , Ġnew Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMy ViewHolder Ġ= ĊĠĠĠĠĠĠĠ ĠMy ViewHolder ( get Layout Binding ( LayoutInflater . from ( parent . context ), Ġparent )) ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠMy ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġget Differ (). current List [ holder . binding Adapter Position ] ĊĠĠĠĠĠĠĠ Ġbind View ( holder , Ġitem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġget Differ (). current List . size ĊĊĠĠĠ Ġinner Ġclass ĠMy ViewHolder ( val Ġview Binding : Ġdata Binding ) Ġ: ĠRecyclerView . ViewHolder ( view Binding . root ) Ċ Ċ }