package Ġnet . k ib ot u . android . recyclerview presenter Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġ[ Jan ĠR abe ]( https :// k ib ot u . net ). Ċ Ġ*/ Ċ open Ġclass ĠPres enter ViewModel < T >( ĊĠĠĠ Ġval Ġmodel : ĠT , ĊĠĠĠ Ġ@ Layout Res ĊĠĠĠ Ġval Ġlayout : ĠInt , ĊĠĠĠ Ġvar Ġuuid : ĠString Ġ= ĠUID Generator . new UID (). toString (), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHook Ġfor Ġdiff Ġutils ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġhttps :// developer . android . com / reference / android / support / v 7 / util / Diff Util . Callback . html # get Change Payload ( int ,% 2 0 int ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġchanged Payload : Ġ(( new : ĠT , Ġold : ĠT ) Ġ-> ĠBundle ? )? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv okes Ġwhen Ġview Ġgets Ġattached . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Attach State ChangeListener : ĠView . On Attach State ChangeListener ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv okes Ġclick Ġlistener . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġitem Ġ ĠModel Ġof Ġthe Ġadapter . ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ ĠView Ġthat Ġhas Ġbeen Ġclicked . ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠAdapter Ġposition Ġof Ġthe Ġclicked Ġelement . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon ItemClickListener : Ġ(( item : ĠT , Ġview : ĠView , Ġposition : ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHook Ġfor Ġdiff Ġutils ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġhttps :// developer . android . com / reference / android / support / v 7 / util / Diff Util . Callback . html # get Change Payload ( int ,% 2 0 int ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġinternal Ġfun Ġchanged Payload ( new : ĠAny ): ĠBundle ? Ġ= Ġchanged Payload ?. invoke ( new Ġas ĠT , Ġmodel ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvenience Ġmethod Ġto Ġinvoke Ġ[ on ItemClickListener ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonClick ( view Holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon ItemClickListener ?. invoke ( model , ĠviewHolder . item View , ĠviewHolder . adapter Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠPres enter ViewModel < *> ĊĊĠĠĠĠĠĠĠ Ġif Ġ( model Ġ!= Ġother . model ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Ġ!= Ġother . layout ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( uuid Ġ!= Ġother . uuid ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġmodel ?. hashCode () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġlayout ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġuuid . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Presenter ViewModel ( model =$ model , Ġlayout =$ layout , Ġuuid ='$ uuid ')" Ċ }