package Ġcom . mig uel . my application . ui . adapters Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . mig uel . my application . R Ċ import Ġcom . mig uel . my application . datasource . ui . Venue Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . view _ empty . view .* Ċ import Ġkotlinx . android . synt hetic . main . view _ title . view .* Ċ import Ġkotlinx . android . synt hetic . main . view _ venue . view .* Ċ Ċ private Ġconst Ġval ĠTYPE _ HEADER Ġ= Ġ 1 Ċ private Ġconst Ġval ĠTYPE _ LIST Ġ= Ġ 2 Ċ private Ġconst Ġval ĠTYPE _ EMPTY Ġ= Ġ- 1 Ċ Ċ class ĠV en ues Adapter Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġon Venue ClickListener : Ġ( String ) Ġ-> ĠUnit ĊĊĠĠĠ Ġvar Ġtitle : ĠString Ġ= Ġ" Venue " ĊĊĠĠĠ Ġvar Ġven ues List : ĠList < Venue > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġset ( venue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġven ue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ HEADER Ġ-> ĠTitle ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . view _ title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ EMPTY Ġ-> ĠEmpty ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . view _ empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠR . string . data _ empty _ message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠV en ues ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . view _ venue , Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠV en ues ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . selected Venue Listener Ġ= Ġon Venue ClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( ven ues List [ position Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTitle ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġven ues List . isEmpty () Ġ-> ĠTYPE _ EMPTY ĊĠĠĠĠĠĠĠ Ġposition Ġ== Ġ 0 Ġ-> ĠTYPE _ HEADER ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTYPE _ LIST ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġven ues List . size Ġ+ Ġ 1 ĊĊĠĠĠ Ġinner Ġclass ĠV en ues ViewHolder ( parent View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( parent View ), ĠLayout Container Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġselected Venue Listener : Ġ( String ) Ġ-> ĠUnit ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠitemView ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠV en ue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . venue _ address _ tv . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . venue _ extra _ info _ tv . text Ġ= Ġ"${ item . address ?: "" } Ġ- Ġ${ item . postal Code ?: "" }" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Venue Listener . invoke (" item :$ item ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTitle ViewHolder ( parent : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( parent ), ĠLayout Container Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠitemView ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . tv Title . text Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEmpty ViewHolder ( parent : ĠView , Ġtext : ĠInt ) Ġ: ĠRecyclerView . ViewHolder ( parent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . tv Empty . setText ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ