package Ġp oker cc . android . expand abler ec y cl er view . sample . s lection Ċ Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġp oker cc . android . expand abler ec y cl er view . Expand able Adapter Ċ import Ġp oker cc . android . expand abler ec y cl er view . sample . databinding . Selection Child Item Binding Ċ import Ġp oker cc . android . expand abler ec y cl er view . sample . databinding . Selection Parent Item Binding Ċ Ċ private Ġclass ĠSelection Group VH ( val Ġbinding : ĠSelection Parent Item Binding ) Ġ: ĊĠĠĠ ĠExpand able Adapter . ViewHolder ( binding . root ) Ċ Ċ private Ġclass ĠSelection Child VH ( val Ġbinding : ĠSelection Child Item Binding ) Ġ: ĊĠĠĠ ĠExpand able Adapter . ViewHolder ( binding . root ) Ċ Ċ internal Ġclass ĠSelection Adapter ( private Ġval Ġselections : ĠList < Single Selection < String >>) Ġ: ĊĠĠĠ ĠExpand able Adapter < Expand able Adapter . ViewHolder >() Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Group ViewHolder ( view Group : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayoutInflater . from ( view Group . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠSelection Parent Item Binding . inflate ( it , Ġview Group , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let (:: Selection Group VH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Child ViewHolder ( view Group : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayoutInflater . from ( view Group . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠSelection Child Item Binding . inflate ( it , Ġview Group , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let (:: Selection Child VH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind Child ViewHolder ( ĊĠĠĠĠĠĠĠ Ġholder : ĠViewHolder , ĊĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġchild Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġpayload s : ĠList < Any > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder Ġas ĠSelection Child VH ĊĠĠĠĠĠĠĠ Ġwith ( holder . binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġselections [ group Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġselection . options [ child Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradio Button . isChecked Ġ= Ġchild Position Ġ== Ġselection . selectedIndex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradio Button . text Ġ= Ġoption ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Selection Changed ( selection , Ġgroup Position , Ġchild Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Selection Changed ( ĊĠĠĠĠĠĠĠ Ġselection : ĠSingle Selection < String >, ĊĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġchild Position : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold SelectedIndex Ġ= Ġselection . selectedIndex ĊĠĠĠĠĠĠĠ Ġif Ġ( old SelectedIndex Ġ== Ġchild Position ) Ġreturn ĊĠĠĠĠĠĠĠ Ġselection . selectedIndex Ġ= Ġchild Position ĊĠĠĠĠĠĠĠ Ġnotify Child Change ( group Position , Ġchild Position ) ĊĠĠĠĠĠĠĠ Ġif Ġ( old SelectedIndex Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Child Change ( group Position , Ġold SelectedIndex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind Group ViewHolder ( ĊĠĠĠĠĠĠĠ Ġholder : ĠViewHolder , ĊĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġexpand : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġpayload s : ĠList < Any > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġas ĠSelection Group VH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġselections [ group Position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . title Text . text Ġ= Ġ"${ group Position Ġ+ Ġ 1 }.${ item . name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . binding . arrow Image . rotation Ġ= Ġif Ġ( expand ) Ġ 0 f Ġelse Ġ- 9 0 . 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Group ViewHolder Expand Change ( ĊĠĠĠĠĠĠĠ Ġholder : ĠViewHolder , ĊĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġanim Duration : ĠLong , ĊĠĠĠĠĠĠĠ Ġexpand : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder Ġas ĠSelection Group VH ĊĠĠĠĠĠĠĠ Ġval Ġarrow Image Ġ= Ġholder . binding . arrow Image ĊĠĠĠĠĠĠĠ Ġif Ġ( expand ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( arrow Image , ĠView . ROT ATION , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( anim Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( arrow Image , ĠView . ROT ATION , Ġ- 9 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( anim Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Count (): ĠInt Ġ= Ġselections . size ĊĊĠĠĠ Ġoverride Ġfun Ġget Child Count ( group Position : ĠInt ): ĠInt Ġ= Ġselections [ group Position ]. options . size Ċ }