package Ġcom . hel lf ish . ev ement o Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . hel lf ish . ev ement o . extensions . inflate Ċ import Ġandroid . widget . TextView ĊĊ Ċ abstract Ġclass ĠRe cycler Adapter < V : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem >( val Ġitems : ĠList < Item >) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEMPTY _ VIEW Ġ= Ġ 1 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcontext Ġ: ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewHolder : ĠRecyclerView . ViewHolder Ġ= Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEMPTY _ VIEW Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparent . inflate ( layout ( view Type ), Ġfalse ) Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty ViewHolder < Item >( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠContent ViewHolder < V , Item >( parent . inflate ( layout ( view Type ), Ġfalse ) Ġas ĠV ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this . getItem ViewType ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEMPTY _ VIEW Ġ-> Ġ( holder Ġas ĠE vement o ViewHolder < TextView , Item >). do On Bind ( context = context , Ġaction Ġ= Ġdo On Empty On Bind ViewHolder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( holder Ġas ĠE vement o ViewHolder < V , Item >). do On Bind ( item = items [ position ], Ġcontext Ġ= Ġcontext , Ġaction Ġ= Ġdo On Item On Bind ViewHolder ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( items . count () Ġ> Ġ 0 ) Ġitems . count () Ġelse Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( items . count () Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEMPTY _ VIEW ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . getItem ViewType ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun ĠgetItem View ( item : ĠItem ) Ġ: ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġabstract Ġfun Ġlayout ( item Ġ: ĠInt ) Ġ: ĠInt ĊĊĠĠĠ Ġabstract Ġfun Ġdo On Item On Bind ViewHolder (): Ġ( view : ĠV , Ġitem : ĠItem , Ġcontext : ĠContext ?) Ġ-> ĠUnit ĊĠĠĠ Ġabstract Ġfun Ġdo On Empty On Bind ViewHolder (): Ġ( view : ĠTextView , Ġcontext : ĠContext ?) Ġ-> ĠUnit ĊĊĠĠĠ Ġinterface ĠE vement o ViewHolder < V : View , Item > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġdo On Bind ( item : ĠItem , Ġcontext : ĠContext ?, Ġaction : Ġ( view : ĠV , Ġitem : ĠItem , Ġcontext : ĠContext ?) Ġ-> ĠUnit ) ĊĠĠĠĠĠĠĠ Ġfun Ġdo On Bind ( context : ĠContext ?, Ġaction : Ġ( view : ĠV , Ġcontext : ĠContext ?) Ġ-> ĠUnit ) ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠEmpty ViewHolder < Item >( private Ġval Ġview : ĠTextView ) ĊĠĠĠĠĠĠĠ Ġ: ĠRecyclerView . ViewHolder ( view ), ĠE vement o ViewHolder < TextView , ĠItem > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo On Bind ( item : ĠItem , Ġcontext : ĠContext ?, Ġaction : Ġ( view : ĠTextView , Ġitem : ĠItem , Ġcontext : ĠContext ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( view , Ġitem , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo On Bind ( context : ĠContext ?, Ġaction : Ġ( view : ĠTextView , Ġcontext : ĠContext ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( view , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠContent ViewHolder < V : View , ĠItem >( private Ġval Ġview : ĠV ) ĊĠĠĠĠĠĠĠ Ġ: ĠRecyclerView . ViewHolder ( view ), ĠE vement o ViewHolder < V , Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo On Bind ( item : ĠItem , Ġcontext : ĠContext ?, Ġaction : Ġ( view : ĠV , Ġitem : ĠItem , Ġcontext : ĠContext ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( view , Ġitem , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo On Bind ( context : ĠContext ?, Ġaction : Ġ( view : ĠV , Ġcontext : ĠContext ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( view , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ