package Ġcom . omega _ r . bind . model . bind ers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Spinner Ċ import Ġcom . omega _ r . adapters . Omega Spinner Adapter Ċ import Ġcom . omega _ r . bind . model . Bind Model Ċ import Ġkotlin . reflect . K Property Ċ Ċ open Ġclass ĠSp inner List Binder < M , ĠSM >( ĊĠĠĠ Ġoverride Ġval Ġid : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġlayout Res : ĠInt , ĊĠĠĠ Ġprivate Ġvar arg Ġval Ġproperties : ĠK Property <* >, ĊĠĠĠ Ġprivate Ġval Ġnon SelectedItem : ĠSM ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġcallback : Ġ(( M , ĠSM ?, ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġselector : Ġ( M ) Ġ-> ĠSM ?, ĊĠĠĠ Ġprivate Ġval Ġconverter : Ġ( Context , ĠSM , Ġis DropDown : ĠBoolean ) Ġ-> ĠCharSequence Ċ ) Ġ: ĠB inder < Spinner , ĠM >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( item View : ĠSp inner ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . adapter Ġ= ĠO mega Spinner Adapter . Custom Adapter ( item View . context , Ġlayout Res , Ġconverter ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . non SelectedItem Ġ= Ġnon SelectedItem ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ", Ġ" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ") ĊĠĠĠ Ġoverride Ġfun Ġbind ( spinner : ĠSp inner , Ġitem : ĠM ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠList < SM >? Ġ= Ġitem . find Value ( item , Ġproperties ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= Ġspinner . adapter Ġas ĠO mega Spinner Adapter . Custom Adapter < SM > ĊĊĠĠĠĠĠĠĠ Ġadapter . list Ġ= Ġlist Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . on ItemSelected Listener Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadapter . setSelection ( spinner , Ġselector ( item )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( item , Ġadapter . getSelection ( spinner ), Ġadapter . getSelection Position ( spinner )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġ< SM , ĠM > ĠBind Model . Builder < M >. bind List ( ĊĠĠĠ Ġid : ĠInt , ĊĠĠĠ Ġlayout Res : ĠInt Ġ= Ġandroid . R . layout . simple _ spinner _ item , ĊĠĠĠ Ġvar arg Ġproperties : ĠK Property <* >, ĊĠĠĠ Ġnon SelectedItem : ĠSM ? Ġ= Ġnull , ĊĠĠĠ Ġcallback : Ġ(( M , ĠSM ?, ĠInt ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġselector : Ġ( M ) Ġ-> ĠSM ?, ĊĠĠĠ Ġconverter : Ġ( Context , ĠSM , Ġis DropDown : ĠBoolean ) Ġ-> ĠCharSequence Ċ ) Ġ= Ġbind Binder ( ĊĠĠĠ ĠSp inner List Binder ( ĊĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠ Ġlayout Res , ĊĠĠĠĠĠĠĠ Ġ* properties , ĊĠĠĠĠĠĠĠ Ġnon SelectedItem Ġ= Ġnon SelectedItem , ĊĠĠĠĠĠĠĠ Ġcallback Ġ= Ġcallback , ĊĠĠĠĠĠĠĠ Ġselector Ġ= Ġselector , ĊĠĠĠĠĠĠĠ Ġconverter Ġ= Ġconverter ĊĠĠĠ Ġ) Ċ )