package Ġcom . commit 4 5 1 . modal bottom sheet dialog fragment Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . annotation . Menu Res Ċ import Ġandroidx . appcompat . view . menu . Menu Builder Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . commit 4 5 1 . modal bottom sheet dialog fragment . Modal Bottom Sheet Dialog Fragment . Builder Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ Ċ @ Suppress Lint (" Restricted Api ") Ċ /** Ċ Ġ* Ġ[ Bottom Sheet Dialog Fragment ] Ġwhich Ġcan Ġshow Ġa Ġselection Ġof Ġoptions . ĠCreate Ġusing Ġthe Ġ[ Builder ] Ċ Ġ*/ Ċ class ĠModal Bottom Sheet Dialog Fragment Ġ: ĠBottom Sheet Dialog Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ OPTIONS Ġ= Ġ" options " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ LAYOUT Ġ= Ġ" layout " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ COLUMNS Ġ= Ġ" columns " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ HEADER Ġ= Ġ" header " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ HEADER _ LAYOUT _ RES Ġ= Ġ" header _ layout _ res " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnew Instance ( builder : ĠBuilder ): ĠModal Bottom Sheet Dialog Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠModal Bottom Sheet Dialog Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Parcelable ArrayList ( KEY _ OPTIONS , Ġbuilder . options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( KEY _ LAYOUT , Ġbuilder . layout Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( KEY _ COLUMNS , Ġbuilder . columns ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString ( KEY _ HEADER , Ġbuilder . header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( KEY _ HEADER _ LAYOUT _ RES , Ġbuilder . header Layout Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlist : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠAdapter ĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠListener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġmenu Inflater Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMenu Inflater ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . modal _ bottom _ sheet _ dialog _ fragment , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġview . findViewById ( R . id . list ) ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġarguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" You Ġneed Ġto Ġcreate Ġthis Ġvia Ġthe Ġbuilder ") ĊĊĠĠĠĠĠĠĠ Ġval Ġoption Hold ers Ġ= Ġarguments . get Parcelable ArrayList < Option Holder >( KEY _ OPTIONS ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġmutable ListOf < Option >() ĊĊĠĠĠĠĠĠĠ Ġoption Hold ers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġit . resource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Request Ġ= Ġit . option Request ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resource Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf late ( resource , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option Request Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( option Request . to Option ( context !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠAdapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Modal Option Selected ( this @ Modal Bottom Sheet Dialog Fragment . tag , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . layout Res Ġ= Ġarguments . getInt ( KEY _ LAYOUT ) ĊĠĠĠĠĠĠĠ Ġadapter . header Ġ= Ġarguments . getString ( KEY _ HEADER ) ĊĠĠĠĠĠĠĠ Ġadapter . header Layout Res Ġ= Ġarguments . getInt ( KEY _ HEADER _ LAYOUT _ RES ) ĊĊĠĠĠĠĠĠĠ Ġlist . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġarguments . getInt ( KEY _ COLUMNS ) ĊĠĠĠĠĠĠĠ Ġif Ġ( columns Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġcolumns ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager . span Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( adapter . header Ġ!= Ġnull Ġ&& Ġposition Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter . set ( options ) ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġbind Host () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinf late ( menu Res : ĠInt , Ġoptions : ĠMutable List < Option >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu Ġ= ĠMenu Builder ( context ) ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( menu Res , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmenu . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmenu . getItem ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= ĠOption ( item . itemId , Ġitem . title , Ġitem . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( option ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Host (): ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Fragment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Fragment Ġis ĠListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparent Fragment Ġas ĠListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠListener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext Ġas ĠListener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Modal Bottom Sheet Dialog Fragment Ġmust Ġbe Ġattached Ġto Ġa Ġparent Ġ( activity Ġor Ġfragment ) Ġthat Ġimplements Ġthe ĠModal Bottom Sheet Dialog Fragment . Listener ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġto Ġbuild Ġa Ġ[ Modal Bottom Sheet Dialog Fragment ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġoptions Ġ= ĠArrayList < Option Holder >() ĊĠĠĠĠĠĠĠ Ġ@ Layout Res ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlayout Res Ġ= ĠR . layout . modal _ bottom _ sheet _ dialog _ fragment _ item ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġcolumns Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġheader : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġheader Layout Res Ġ= ĠR . layout . modal _ bottom _ sheet _ dialog _ fragment _ header ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInf late Ġthe Ġgiven Ġmenu Ġresource Ġto Ġthe Ġoptions ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġadd (@ Menu Res Ġmenu Res : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( Option Holder ( menu Res , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd Ġan Ġoption Ġto Ġthe Ġsheet ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġadd ( option : ĠOption Request ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( Option Holder ( null , Ġoption )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġthe Ġcustom Ġlayout Ġresource Ġto Ġinf late Ġfor Ġeach Ġoption . ĠNote Ġthat Ġyou Ġneed Ġto Ġhave Ġa ĊĠĠĠĠĠĠĠĠ Ġ* ĠTextView Ġwith Ġa Ġresource Ġid Ġof Ġ@ android : id / text 1 Ġif Ġyour Ġoption Ġhas Ġa Ġtitle Ġand Ġan ĠImageView ĊĠĠĠĠĠĠĠĠ Ġ* Ġwith Ġa Ġresource Ġid Ġof Ġ@ android : id / icon Ġif Ġyour Ġoption Ġhas Ġa Ġdrawable Ġassociated ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġlayout (@ Layout Res Ġlayout Res : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . layout Res Ġ= Ġlayout Res ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġthe Ġnumber Ġof Ġcolumns Ġyou Ġwant Ġfor Ġyour Ġoptions ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcolumns ( columns : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . columns Ġ= Ġcolumns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd Ġa Ġcustom Ġheader Ġto Ġthe Ġmodal , Ġusing Ġthe Ġcustom Ġlayout Ġif Ġprovided ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġheader ( header : ĠString , Ġ@ Layout Res Ġlayout Res : ĠInt Ġ= ĠR . layout . modal _ bottom _ sheet _ dialog _ fragment _ header ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . header Ġ= Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . header Layout Res Ġ= Ġlayout Res ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBuild Ġthe Ġ[ Modal Bottom Sheet Dialog Fragment ]. ĠYou Ġstill Ġneed Ġto Ġcall Ġ[ Modal Bottom Sheet Dialog Fragment . show ] Ġwhen Ġyou Ġwant Ġit Ġto Ġshow ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠModal Bottom Sheet Dialog Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Instance ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBuild Ġand Ġshow Ġthe Ġ[ Modal Bottom Sheet Dialog Fragment ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow ( fragment Manager : ĠFragment Manager , Ġtag : ĠString ): ĠModal Bottom Sheet Dialog Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuild () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show ( fragment Manager , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdialog ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġfor Ġwhen Ġthe Ġmodal Ġoptions Ġare Ġselected ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġmodal Ġoption Ġhas Ġbeen Ġselected ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Modal Option Selected ( tag : ĠString ?, Ġoption : ĠOption ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠAdapter ( private Ġval Ġcallback : Ġ( option : ĠOption ) Ġ-> ĠUnit ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠVIEW _ TYPE _ HEADER Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠVIEW _ TYPE _ ITEM Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoptions Ġ= Ġmutable ListOf < Option >() ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlayout Res Ġ= ĠR . layout . modal _ bottom _ sheet _ dialog _ fragment _ item ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġheader Layout Res Ġ= ĠR . layout . modal _ bottom _ sheet _ dialog _ fragment _ header ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġheader : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVIEW _ TYPE _ HEADER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( header Layout Res , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHeader ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVIEW _ TYPE _ ITEM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( layout Res , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠItem ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġif Ġ( header Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . adapter Position Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġoptions [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġholder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" W ht Ġis Ġthis ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorrected Position Ġ= Ġif Ġ( header Ġ== Ġnull ) Ġposition Ġelse Ġposition Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠItem ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġoptions [ corrected Position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( holder Ġis ĠHeader ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( header Ġ== Ġnull ) Ġoptions . size Ġelse Ġoptions . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVIEW _ TYPE _ HEADER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVIEW _ TYPE _ ITEM ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset ( options : ĠList < Option >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . options . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . options . addAll ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠItem ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtext : ĠTextView Ġ= Ġview . findViewById ( android . R . id . text 1 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġicon : ĠImageView Ġ= Ġview . findViewById ( android . R . id . icon ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( option : ĠOption ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġoption . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon . setImage Drawable ( option . icon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠHeader ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtext : ĠTextView Ġ= Ġview . findViewById ( android . R . id . text 1 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( header : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġheader ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }