package Ġcom . he itor col ange lo . reddit news . ui . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ Ċ open Ġclass ĠBase Adapter < T Ġ: ĠParcel able >( private Ġval Ġview Creator : Ġ( context : ĠContext ) Ġ-> ĠView Binder < T >) Ġ: ĠRecyclerView . Adapter < Base Adapter . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġitem ClickListener : Ġ(( T ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlayout Inflater : ĠLayoutInflater ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġitems : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Binder Ġ= Ġview Creator . invoke ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġview Binder Ġas ? ĠView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" The ĠView Binder Ġinstance Ġalso Ġmust Ġbe Ġa ĠView ") ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġholder . item View ĊĠĠĠĠĠĠĠ Ġval Ġbinder Ġ= Ġ( view Ġas ? ĠView Binder < T >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException ("${ holder . item View :: class } Ġcannot Ġbe Ġcast Ġto ĠView Binder <> ") ĊĊĠĠĠĠĠĠĠ Ġbinder . bind ( model ) ĊĠĠĠĠĠĠĠ Ġview . root View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ClickListener ?. invoke ( model ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġrestore InstanceState ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġbundle ?. get Parcelable ArrayList ( STATE _ LIST ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġsave InstanceState (): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable ArrayList ( STATE _ LIST , ĠArrayList ( items )) ĊĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġitem ClickListener ( listener : Ġ(( T ) Ġ-> ĠUnit )): ĠBase Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . item ClickListener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠList Ġhandle Ġmethods ĊĠĠĠ Ġfun Ġadd New Items ( new Items : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġitem Count ĊĠĠĠĠĠĠĠ Ġthis . items . addAll ( new Items ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( start , Ġnew Items . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠisEmpty () Ġ= Ġitems . isEmpty () ĊĊĠĠĠ Ġopen Ġfun Ġclear List () Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetItem ( position : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Items (): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġprotected Ġfun Ġget LayoutInflater ( parent : ĠViewGroup ): ĠLayoutInflater Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Inflater Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout Inflater !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTATE _ LIST Ġ= Ġ" STATE _ LIST " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) ĊĊĠĠĠ Ġinterface ĠView Binder < in ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( model : ĠT ) ĊĠĠĠ Ġ} Ċ } Ċ