package Ġdev . mar shi . android . shard Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġdev . mar shi . android . shard . expand able view . Expand able Item View Ċ Ċ class ĠAdapter ( ĊĠ Ġprivate Ġval Ġlifecycle Owner : ĠLifecycle Owner , ĊĠ Ġprivate Ġval Ġlist : ĠMutable List < Normal Item > Ċ ) Ġ: ĠRecyclerView . Adapter < VH >() Ġ{ ĊĊĠ Ġprivate Ġval Ġclick Position LiveData Ġ= ĠMutable LiveData < Int >() ĊĠ Ġprivate Ġval Ġanim ator Listener Ġ= ĊĠĠĠ ĠExpand able Item Animator Listener () ĊĊĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠV H Ġ{ ĊĠĠĠ Ġval ĠitemView Ġ= ĊĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . expand able _ item _ view , Ġparent , Ġfalse ) Ġas ĠExpand able Item View ĊĠĠĠ Ġreturn ĠV H ( item View ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġlist . size ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠV H , Ġposition : ĠInt ) Ġ{ ĊĠĠĠ Ġval ĠitemView Ġ= Ġholder . view ĊĠĠĠ Ġval Ġitem Ġ= Ġlist [ position ] ĊĊĠĠĠ Ġclick Position LiveData . observe ( lifecycle Owner , ĠObserver Ġ{ Ġclick Position Ġ-> ĊĠĠĠĠĠ Ġif Ġ(! item . is Opened Ġ&& Ġposition Ġ== Ġclick Position ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem . is Opened Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠitemView . expand ( anim ator Listener ) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( item . is Opened ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem . is Opened Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠitemView . collapse ( anim ator Listener ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġif Ġ( anim ator Listener . is Anim ating ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġclick Position LiveData . value Ġ= Ġposition ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ class ĠV H ( val Ġview : ĠExpand able Item View ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ċ