package Ġit . cia os ono ke k ko . form builder . form . adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġit . cia os ono ke k ko . form builder . databinding . Item Sheet Adapter Binding Ċ Ċ class ĠSheet Adapter ( ĊĠĠĠ Ġprivate Ġval Ġelements : ĠList < String >, ĊĠĠĠ Ġprivate Ġval Ġselected Values : ĠMutable List < String >, ĊĠĠĠ Ġprivate Ġval Ġmulti Select : ĠBoolean ? Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġadapter OnClick : Ġ( Int , ĠString ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . Adapter < Sheet Adapter . Sheet Holder >() Ġ{ ĊĊĠĠĠ Ġvar Ġfiltered Elements : ĠList < String > Ġ= Ġelements ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠSheet Adapter . Sheet Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfl ated View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Sheet Adapter Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSheet Holder ( in fl ated View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġfiltered Elements . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠSheet Adapter . Sheet Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind Content Cell ( filtered Elements [ position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter ( search Query : ĠString ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsearch Query ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Elements Ġ= Ġelements . filter Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . toLowerCase (). contains ( search Query , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Elements Ġ= Ġelements ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSheet Holder (_ view : ĠItem Sheet Adapter Binding ) Ġ: ĠRecyclerView . ViewHolder (_ view . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġview : ĠItem Sheet Adapter Binding Ġ= Ġ_ view ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Content Cell ( data : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . txt Title . text Ġ= Ġdata ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multi Select Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . checkbox . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . checkbox . isChecked Ġ= Ġselected Values . contains ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . checkbox . setOn Checked ChangeListener Ġ{ Ġview , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . has Focus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Data ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . checkbox . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . root . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multi Select Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Data ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . checkbox . isChecked Ġ= Ġselected Values . contains ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter OnClick ( adapter Position , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Data ( data : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( selected Values . contains ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Values . remove ( data ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Values . add ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ