package Ġcom . jj lf . jj kit _ utils . re cy lc er View Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ class ĠJ J Recycler Adapter Old < T >( private Ġval Ġitems : ĠMutable List < T ?> Ġ= Ġmutable ListOf ()) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder > (){ ĊĊĠĠĠ Ġprivate Ġvar Ġm Token Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Fetch More Callback : Ġ( ()-> Unit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm View Creator Ġ: Ġ(( Context )-> ĠView )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Progress View Creator Ġ: Ġ(( Context )-> ĠView )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Error View Creator Ġ: Ġ(( Context )-> ĠView )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Bind Callback : Ġ(( T ?, View , Int )-> Unit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Bind Progress Callback : Ġ( ()-> Unit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Bind Error Callback : Ġ( ()-> Unit )? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Show Error View Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Added Error Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Is Fetch More Enabled Ġ= Ġfalse ĊĊĠĠĠ Ġ// if Ġlast Ġis Ġnull Ġcalling Ġfetch Ġmore Ġif Ġenabled , Ġdefault Ġfalse ĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġif ( position Ġ== Ġitems . size Ġ- Ġ 1 Ġ&& Ġitems . last () Ġ== Ġnull Ġ&& Ġm Show Error View ) Ġ 2 ĊĠĠĠĠĠĠĠ Ġelse Ġif ( position Ġ== Ġitems . size Ġ- Ġ 1 Ġ&& Ġitems . last () Ġ== Ġnull ) ĠĠ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġif ( value Ġ== Ġ 1 Ġ&& Ġm Is Fetch More Enabled ) Ġm Fetch More Callback ?. invoke () ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġholder Ġ: ĠRecyclerView . ViewHolder ĊĠĠĠĠĠĠĠ Ġwhen ( view Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġm View Creator !!. invoke ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= ĠViewHolder ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġm Progress View Creator ?. invoke ( parent . context ) Ġ?: ĠView ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= ĠView Load ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġm Error View Creator ?. invoke ( parent . context ) Ġ?: ĠView ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= ĠView Error ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġholder ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( holder Ġis ĠViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bind Callback ?. invoke ( c , holder . view , position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( holder Ġis ĠView Load ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bind Progress Callback ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠView Error ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bind Error Callback ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs Fetch More Enabled ( boolean : ĠBoolean ): ĠJ J Recycler Adapter Old < T >{ ĊĠĠĠĠĠĠĠ Ġm Is Fetch More Enabled Ġ= Ġboolean ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Is Fetch More Enabled (): Boolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġm Is Fetch More Enabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Token ( num : Int ) Ġ: ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠĠ Ġm Token Ġ= Ġnum ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetToken (): Int { ĊĠĠĠĠĠĠĠ Ġreturn Ġm Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset View Creator ( creator :( Context )-> View ): ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠĠ Ġm View Creator Ġ= Ġcreator ĊĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġset Progress View Creator ( creator :( Context )-> View ): ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġm Progress View Creator Ġ= Ġcreator ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Bind Progress Callback ( bind : Ġ() -> Unit ): ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bind Progress Callback Ġ= Ġ Ġbind ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġset On Bind Error Callback ( bind : Ġ() -> Unit ): ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bind Error Callback Ġ= Ġ Ġbind ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠsetError View Creator ( creator :( Context )-> View ): ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġm Error View Creator Ġ= Ġcreator ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Bind Callback ( bind : Ġ( item : T ?, View , position : Int )-> Unit ): ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bind Callback Ġ= Ġbind ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Fetch More Callback ( callback : Ġ() -> Unit ) Ġ: ĠJ J Recycler Adapter Old < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġm Fetch More Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠnewData ( list : ĠList < T ? >, Ġtoken : Int Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġitems . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetList Filtered Not Repeat Async ( list : ĠList < T ? >, Ġresult : Ġ( Mutable List < T ?> )-> Unit ){ ĊĠĠĠĠĠĠ ĠThread { ĊĠĠĠĠĠĠĠ Ġval Ġfinal List Ġ= ĠĠĠ Ġlist . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ!= Ġnull Ġ&& Ġ! items . contains ( it ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠMutable List < T ?> ĊĠĠĠĠĠĠĠĠĠĠ Ġresult . invoke ( final List ) ĊĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). interrupt () ĊĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( list : ĠList < T ? >, Ġtoken : Int Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( list . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Start Ġ= Ġitems . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . addAll ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( pos Start , Ġlist . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( obj : ĠT , Ġtoken : Int Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( items . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert To Index ( index : ĠInt , Ġobj : ĠT , Ġtoken Ġ: ĠInt Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( index , obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate To Index ( index : Int , obj : ĠT , token : ĠInt = 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġobj ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove At ( index : ĠInt , token : ĠInt Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠ Ġif ( token Ġ== Ġm Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// u Ġneed Ġoverride Ġequals Ġfor Ġa Ġbetter Ġsearch ĊĠĠĠ Ġfun Ġfind Removed Async ( context : ĠActivity , Ġobj : ĠT , Ġtoken : ĠInt Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠ Ġif ( m Token Ġ== Ġtoken ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtr Ġ= ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġobj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove At ( found Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( found Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" JJ Kit ", Ġ" JJ Recycler Adapter : find Removed Async Ġitem Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" JJ Kit ", Ġ" JJ Recycler Adapter : find Removed Async Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). interrupt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr . priority Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr . start () ĊĠĠĠĠĠĠĠ Ġ} else ĠLog . e (" JJ Kit ", Ġ" JJ Recycler Adapter : find Removed Async Ġtoken Ġinvalid ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// u Ġneed Ġoverride Ġequals Ġfor Ġa Ġbetter Ġsearch Ġor Ġwrong Ġitem Ġcan Ġbe Ġelim inated Ġsample : Ġid Ġ== Ġid ĊĠĠĠ Ġfun Ġfind Update Modified Async ( context : ĠActivity , Ġobj : ĠT , Ġtoken : ĠInt Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġ Ġtr Ġ= ĠThread { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfound Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . forEach Indexed Ġ{ Ġindex , Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġobj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ found Index ] Ġ= Ġobj ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( found Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : InterruptedException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" JJ Kit "," JJ Recycler Adapter : find Update Modified Async Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} finally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). interrupt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr . priority Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Last If Null ( token : Int Ġ= Ġ 0 ){ ĊĠĠĠĠĠĠĠ Ġif ( token Ġ== Ġm Token ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġitems . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( position Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items [ position ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . remove At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Show Error View Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Added Error Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ// error Ġwhen Ġout Ġmemory , Ġbut Ġcan Ġbe Ġused Ġfor Ġfetch Ġerror ĊĠĠĠ Ġfun Ġadd Error (){ ĊĠĠĠĠĠĠĠ Ġremove Last If Null () ĊĠĠĠĠĠĠĠ Ġitems . add ( null ) ĊĠĠĠĠĠĠĠ Ġm Show Error View Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Is Added Error Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( items . size Ġ- Ġ 1 ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠgetList (): ĠMutable List < T ? >{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠView Load ( val Ġview : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) ĊĊĠĠĠ Ġclass ĠViewHolder ( val Ġview : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) ĊĊĠĠĠ Ġclass ĠView Error ( val Ġview : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ċ Ċ }