package Ġstudio . att ect . framework 6 6 6 . simple ; ĊĊ Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . core . util .* Ċ import Ġcom . h 6 ah 4 i . android . widget . adv recyclerview . expand able . RecyclerView Expand able Item Manager Ċ import Ġcom . h 6 ah 4 i . android . widget . adv recyclerview . utils . Abstract Expand able Item Adapter Ċ import Ġcom . h 6 ah 4 i . android . widget . adv recyclerview . utils . Abstract Expand able Item ViewHolder Ċ import Ġstudio . att ect . framework 6 6 6 . R Ċ import Ġstudio . att ect . framework 6 6 6 . interfaces . Unique Data Ċ import Ġjava . lang . IllegalStateException Ċ Ċ /** Ċ Ġ* Ġæľī ä¸īä¸ª éĽĨåĲĪ æķ°æį® Ċ Ġ* Ġ 1 . ĠviewHolder Map Ġ åŃĺ æĶ¾ æ³¨åĨĮ è¿Ľ æĿ¥çļĦ å¸ĥå±Ģ æĸĩä»¶ Ċ Ġ* Ġ 2 . Ġgroup List ĠĠĠĠ Ġ åŃĺ æĶ¾ ç»Ħ æķ°æį® Ċ Ġ* Ġ 3 . Ġchild Map ĠĠ Ġ åŃĺ æĶ¾ äºĮ çº§ æķ°æį® Ċ Ġ* Ċ Ġ* Ġä¸Ģ çº§ æķ°æį® åĴĮ äºĮ çº§ æķ°æį® éĢļè¿ĩ ä¸Ģ çº§ æķ°æį® æĿ¥ ä¸İ äºĮ çº§ çļĦæķ°æį® æĿ¥ äºĴ çĽ¸ ç»ĳå®ļ Ċ Ġ* Ċ Ġ* ĠSimple List Data ä¸Ń æľīä¸Ģä¸ª id Ġä¸į ä½Ĩ ç»Ļ adapter çĶ¨ , ä¹Łæĺ¯ ç»Ļ ä¸Ģ çº§ æķ°æį® åĴĮ äºĮ çº§ æķ°æį® ä¹ĭéĹ´ ç»ĳå®ļ åħ³ç³» çĶ¨çļĦ Ċ Ġ* Ċ Ġ* Ġgroup ĠçļĦ id åĢ¼ åĴĮ child çļĦ id åĢ¼ æĺ¯ åĪĨåĪ« åıĸ èĩª Ġ èĩª å¢ŀ éķ¿ çļĦ group Index åĴĮ child Index çļĦåĢ¼ Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ@ author Ġc ao yu Ċ Ġ*/ Ċ class ĠSimple Expand able Adapter < T >( val Ġowner : ĠT , Ġval Ġex Manager : ĠRecyclerView Expand able Item Manager ) Ġ: ĠAbstract Expand able Item Adapter < Simple Expand able Adapter . Expand able Basic ViewHolder < out ĠUnique Data >, ĠSimple Expand able Adapter . Expand able Basic ViewHolder < out ĠUnique Data >>() Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸º æķ°æį® æ·»åĬł èĩª å¢ŀ éķ¿ çļĦ id ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġgroup Index Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġchild Index Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® ä¸įåĲĮçļĦ ç±»åŀĭ æĮģ æľī ä¸įåĲĮ ViewHolder çļĦ class ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠviewHolder Map Ġ= ĠSparse Array < Class < out ĠExpand able Basic ViewHolder < out ĠUnique Data >> >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġgroup çļĦæķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġgroup List Ġ= ĠArrayList < Simple List Data < out ĠUnique Data >>() Ċ Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* Ġ äºĮ çº§ åĪĹè¡¨ çļĦæķ°æį® Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġval Ġchild Sparse Ġ= ĠSparse Array < ArrayList < Simple List Data < out ĠUnique Data >> >() ĊĊĊĠĠĠ Ġval Ġchild Map Ġ= ĠHashMap < Simple List Data < out ĠUnique Data >, ĠArrayList < Simple List Data < out ĠUnique Data >> >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æ³¨åĨĮ ä¸Ģä¸ª ç±»åŀĭçļĦ ViewHolder ï¼Ī Class ï¼ī ĊĠĠĠĠ Ġ* Ġ ä¸İ ä¹ĭ å¯¹åºĶ ç±»åŀĭ çļĦæķ°æį® å°Ĩ äº¤ ç»Ļ åħ¶ ä½¿çĶ¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlayout Res Ġ å¯¹åºĶçļĦ å¸ĥå±Ģ çļĦ id ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġregister ViewHolder (@ Layout Res Ġlayout Res : ĠInt Ġ= Ġ 0 , Ġbasic ViewHolder Class : ĠClass < out ĠExpand able Basic ViewHolder < out ĠUnique Data >>) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewHolder Map [ layout Res ] Ġ= Ġbasic ViewHolder Class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģä¸ª ç©º ç»Ħ æķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġ è¦ģ åĬłåħ¥ åĪĹè¡¨ çļĦæķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param Ġlayout Res Ġæ·»åĬł çļĦæķ°æį® å¯¹åºĶçļĦ å¸ĥå±Ģ , fake ä¸º true æĹ¶ ï¼Į åı¯ä»¥ ç»Ļ å®ļ ä»»æĦı åĢ¼ ĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġ è¦ģ æıĴåħ¥ çļĦ ä½įç½® ï¼Į é»ĺè®¤ä¸º åĪĹè¡¨ æľ« å°¾ ĊĠĠĠĠ Ġ* Ġ@ param Ġfake Ġæĺ¯åĲ¦ åģļ åģĩ æĵįä½ľ ï¼Į åı¯ä»¥ èİ·åıĸ åĪ° æĸ° æķ°æį®çļĦ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ return Ġæ·»åĬł çļĦ æĸ° æķ°æį®çļĦ ä½įç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd GroupData ( data : ĠUnique Data , Ġ@ Layout Res Ġlayout Res : ĠInt , Ġgroup Position : ĠInt Ġ= Ġgroup List . size , Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( group Position Ġ! in Ġ 0 .. group List . size ) Ġthrow ĠIllegalStateException (" Simple Expand able Adapter Ġgroup Ġposition Ġis Ġout Ġof Ġrange ") ĊĠĠĠĠĠĠĠ Ġif Ġ( fake ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgroup Position ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsimp Data Ġ= ĠSimple List Data ( data , Ġlayout Res ) ĊĠĠĠĠĠĠĠ Ġsimp Data . id Ġ= Ġgroup Index ĊĠĠĠĠĠĠĠ Ġgroup List . add ( group Position , Ġsimp Data ) ĊĠĠĠĠĠĠĠ Ġex Manager . notify Group Item Inserted ( group Position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł æŁĲ ä¸Ģ ç»Ħ ä¸ŃçļĦ ä¸ĢæĿ¡ child æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd Child Into GroupData ( data : ĠUnique Data , Ġ@ Layout Res Ġchild Layout : ĠInt , Ġgroup Position : ĠInt Ġ= Ġgroup List . last Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Position : ĠInt Ġ= Ġchild Map [ group List [ group Position ]] ?. size Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( group Position Ġ! in Ġ 0 .. group List . last Index ) Ġthrow ĠIllegalArgumentException (" Simple Expand able Adapter Ġchild Ġposition Ġis Ġout Ġof Ġrange ") ĊĠĠĠĠĠĠĠ Ġval Ġchild Size Ġ= Ġchild Map [ group List [ group Position ]] ?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( child Position Ġ! in Ġ 0 .. child Size ) Ġthrow ĠIllegalStateException (" Simple Expand able Adapter Ġgroup Ġposition Ġis Ġout Ġof Ġrange ") ĊĠĠĠĠĠĠĠ Ġif Ġ( fake ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild Position ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġgroup Simple Data Ġ= Ġgroup List [ group Position ] ĊĠĠĠĠĠĠĠ Ġif Ġ( child Map [ group Simple Data ] Ġ== Ġnull ) Ġchild Map [ group Simple Data ] Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġval Ġsimple Data Ġ= ĠSimple List Data ( data , Ġchild Layout ) ĊĠĠĠĠĠĠĠ Ġsimple Data . id Ġ= Ġchild Index ĊĠĠĠĠĠĠĠ Ġchild Map [ group Simple Data ]?. add ( child Position , Ġsimple Data ) ĊĠĠĠĠĠĠĠ Ġex Manager . notify Child Item Inserted ( group Position , Ġchild Position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ģæ¬¡ æĢ§ æ·»åĬł åĲĮ ä¸Ģ ç»Ħ ä¸ŃçļĦ å¤ļ æĿ¡ åŃĹ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd Children Into Group ( child Datas : ĠArrayList < Unique Data >, Ġ@ Layout Res Ġchild Layout : ĠInt , Ġgroup Position : ĠInt Ġ= Ġgroup List . size , Ġchild Position : ĠInt Ġ= Ġchild Map [ group List [ group Position ]] ?. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 , Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ æĺ¯åĲ¦ è¶Ĭ çķĮ ĊĠĠĠĠĠĠĠ Ġif Ġ( group Position Ġ! in Ġ 0 .. group List . size ) Ġthrow ĠIllegalStateException (" Simple Expand able Adapter Ġgroup Position Ġis Ġout Ġof Ġrange ") ĊĠĠĠĠĠĠĠ Ġval Ġchild Size Ġ= Ġchild Map [ group List [ group Position ]] ?. size Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( child Position Ġ! in Ġ 0 .. child Size ) Ġthrow ĠIllegalStateException (" Simple Expand able Adapter Ġchild Position Ġis Ġout Ġof Ġrange ") ĊĠĠĠĠĠĠĠ Ġif Ġ( fake ) Ġreturn Ġchild Position ĊĠĠĠĠĠĠĠ Ġval Ġgroup Datas Ġ= Ġchild Map [ group List [ group Position ]] ĊĠĠĠĠĠĠĠ Ġchild Datas . forEach Indexed Ġ{ Ġindex , Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimple Data Ġ= ĠSimple List Data ( child , Ġchild Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Data . id Ġ= Ġchild Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Datas ?. add ( child Position Ġ+ Ġindex , Ġsimple Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġex Manager . notify Child Item Range Inserted ( group Position , Ġchild Position , Ġchild Datas . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Position ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ģæ¬¡ æĢ§ æ·»åĬł ä¸Ģ ç»Ħ ĊĠĠĠĠ Ġ* ĠåĴĮ è¿Ļä¸ª ç»Ħ ä¸ĭ éĿ¢çļĦ å¤ļ æĿ¡ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param Ġgroup Data Ġ ç»Ħ æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ param Ġchild Datas Ġ åŃĲ æķ°æį® åĪĹè¡¨ ĊĠĠĠĠ Ġ* Ġ@ param Ġgroup Layout Ġ ç»Ħ å¸ĥå±Ģ æĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ param Ġchild Layout Ġ åŃĲ å¸ĥå±Ģ æĸĩä»¶ ĊĠĠĠĠ Ġ* Ġ@ param Ġgroup Position Ġ ç»Ħ ä½įç½® ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ éľĢè¦ģ æıĴåħ¥ çļĦ ç»Ħ çļĦæķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd Group Child Datas ( child Datas : ĠArrayList < Unique Data >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Data : ĠUnique Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Layout Res Ġchild Layout : ĠInt , Ġ@ Layout Res Ġgroup Layout : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Position : ĠInt Ġ= Ġgroup List . size , Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fake ) Ġreturn Ġgroup Position ĊĠĠĠĠĠĠĠ Ġval Ġgroup Simple Data Ġ= ĠSimple List Data ( group Data , Ġgroup Layout ) ĊĠĠĠĠĠĠĠ Ġgroup Simple Data . id Ġ= Ġgroup Index ĊĠĠĠĠĠĠĠ Ġgroup List . add ( group Simple Data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( child Map [ group Simple Data ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map . put ( group Simple Data , ĠArrayList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchild Map [ group Simple Data ]?. clear () ĊĠĠĠĠĠĠĠ Ġchild Datas . forEach Indexed Ġ{ Ġ_, Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Simple Data Ġ= ĠSimple List Data ( child , Ġchild Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Simple Data . id Ġ= Ġchild Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map [ group Simple Data ]?. add ( child Simple Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġex Manager . notify Group Item Inserted ( group Position ) ĊĠĠĠĠĠĠĠ Ġex Manager . notify Child Item Range Inserted ( group Position Ġ, Ġ 0 Ġ, Ġchild Datas . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup Position ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å®ŀçİ° ä¸Ģæ¬¡ æĢ§ æ·»åĬł å¤ļ ç»Ħ ç©º æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd Empty GroupData List ( group Datas : ĠArrayList < Unique Data >, Ġ@ Layout Res Ġgroup Layout : ĠInt , Ġgroup Position : ĠInt Ġ= Ġgroup List . size , Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fake ) Ġreturn Ġgroup Position ĊĠĠĠĠĠĠĠ Ġgroup Datas . forEach Indexed Ġ{ Ġindex , Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimp Data Ġ= ĠSimple List Data ( data , Ġgroup Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimp Data . id Ġ= Ġgroup Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup List . add ( group Position Ġ+ Ġindex , Ġsimp Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġex Manager . notify Group Item Range Inserted ( group Position , Ġgroup Datas . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġupdate Child Data ( child Data : ĠUnique Data , Ġ@ Layout Res Ġchild Layout : ĠInt , Ġgroup Position : ĠInt Ġ= Ġ- 1 , Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġc Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġg Position Ġ= Ġgroup Position ĊĠĠĠĠĠĠĠ Ġif Ġ( group Position Ġ== Ġ- 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup List . forEach Indexed Ġstep Out @ Ġ{ Ġg Index , Ġgroup Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map [ group Data ]?. forEach Indexed Ġ{ Ġc Index , Ġchild Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Data . unique Tag () Ġ== Ġchild Data . unique Tag ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Position Ġ= Ġc Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Position Ġ= Ġg Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ step Out ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( g Position Ġ! in Ġ 0 .. group List . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Simple Expand able RecyclerView Ġgroup Ġposition Ġis Ġout Ġof Ġrange ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( c Position Ġ== Ġ- 1 Ġ|| Ġfake ) Ġreturn Ġc Position ĊĠĠĠĠĠĠĠ Ġval Ġchild List Ġ= Ġchild Map [ group List [ g Position ]] ĊĠĠĠĠĠĠĠ Ġ// å¤į çĶ¨ æĹ§ æķ°æį®çļĦ id ĊĠĠĠĠĠĠĠ Ġval Ġold Id Ġ= Ġchild List ?. get ( c Position )?. id Ġ?: Ġchild Index ĊĠĠĠĠĠĠĠ Ġval Ġsimple List Data Ġ= ĠSimple List Data ( child Data , Ġchild Layout ) ĊĠĠĠĠĠĠĠ Ġsimple List Data . id Ġ= Ġold Id ĊĠĠĠĠĠĠĠ Ġchild List ?. set ( c Position , Ġsimple List Data ) ĊĠĠĠĠĠĠĠ Ġex Manager . notify Child Item Changed ( g Position , Ġc Position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġc Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽ´æİ¥ æł¹æį® tag æŁ¥ å¤Ħ æīĢæľī tag çļĦæķ°æį® ä¿®æĶ¹ è°ĥ ĊĠĠĠĠ Ġ* Ġ åīį æıĲ layout çĽ¸åĲĮ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġupdate Children Data In Group ( child List : ĠArrayList < Unique Data >, Ġ@ Layout Res Ġchild Layout : ĠInt , Ġgroup Position : ĠInt Ġ= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchild List . forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Child Data ( child , Ġchild Layout , Ġgroup Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ ä¸ĢæĿ¡ æķ°æį® ĊĠĠĠĠ Ġ* Ġæł¹æį® åĶ¯ä¸Ģ çļĦ tag è¿Ľè¡Į åĪłéĻ¤ ĊĠĠĠĠ Ġ* ĠæŃ¤ æĸ¹æ³ķ åı¯ çĶ¨äºİ æĹł éľĢ åĪ¤æĸŃ æķ°æį® æĺ¯åĲ¦ åŃĺåľ¨ è¿Ľè¡Į å®īåħ¨ åĪłéĻ¤ æĵįä½ľ è°ĥçĶ¨ ï¼Į å¹¶ èĥ½ å¾Ĺ çŁ¥ ç»ĵæŀľ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġ è¦ģ åĪłéĻ¤ çļĦæķ°æį® ï¼Į ä¸į ä¾Ŀèµĸ åĨħåŃĺ åľ°åĿĢ åĪ¤æĸŃ èĢĮ æĺ¯ æł¹æį® åĶ¯ä¸Ģ Tag ĊĠĠĠĠ Ġ* Ġ@ param Ġfake Ġæĺ¯åĲ¦ åģļ åģĩ æĵįä½ľ ï¼Į åı¯ä»¥ èİ·å¾Ĺ è¢« åĪłéĻ¤ çļĦæķ°æį® çļĦ ä½įç½® æĪĸ åĪ¤æĸŃ æľī æ²¡æľī æķ°æį® è¢« åĪłéĻ¤ ï¼Į fake ä¸º true æĹ¶ ï¼Į åı¯ä»¥ ç»Ļ å®ļ ä»»æĦı åĢ¼ ĊĠĠĠĠ Ġ* Ġ@ return ĠåĪłéĻ¤ çļĦæķ°æį® çļĦ ä½įç½® ï¼Į å¦Ĥæŀľ æ²¡æľī æķ°æį® è¢« åĪłéĻ¤ åĪĻ ä¸º null ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Child Data ( data : ĠUnique Data , Ġfake : ĠBoolean Ġ= Ġfalse ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġg Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġc Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġchild Map . keys . forEach Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map [ group ]?. forEach Indexed Ġ{ Ġindex , Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . unique Tag () Ġ== Ġchild . unique Tag ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Position Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Position Ġ= Ġgroup List . indexOf ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( c Position Ġ!= Ġ- 1 Ġ&& Ġg Position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map [ group List [ g Position ]] ?. remove At ( c Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex Manager . notify Child Item Removed ( g Position , Ġc Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġc Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ å¤ļä¸ª æķ°æį® ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ åı¯èĥ½ / åı¯ä»¥ æĺ¯ ä¸į è¿ŀ ç»Ń çļĦ æĵįä½ľ ĊĠĠĠĠ Ġ* Ġæł¹æį® åĶ¯ä¸Ģ çļĦ tag ä½ľä¸º åĪ¤æĸŃ æłĩåĩĨ è¿Ľè¡Į åĪłéĻ¤ ĊĠĠĠĠ Ġ* ĠæŃ¤ æĸ¹æ³ķ åı¯ çĶ¨äºİ æĹł éľĢ åĪ¤æĸŃ æķ°æį® æĺ¯åĲ¦ åŃĺåľ¨ è¿Ľè¡Į å®īåħ¨ åĪłéĻ¤ æĵįä½ľ è°ĥçĶ¨ ï¼Į å¹¶ èĥ½ å¾Ĺ çŁ¥ ç»ĵæŀľ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmore Data Ġ è¦ģ åĪłéĻ¤ çļĦ å¤ļä¸ª æķ°æį® ï¼Į åĪłéĻ¤ åı¯èĥ½ / åı¯ä»¥ ä¸į è¿ŀ ç»Ń ï¼Į ä¸į ä¾Ŀèµĸ åĨħåŃĺ åľ°åĿĢ åĪ¤æĸŃ èĢĮ æĺ¯ æł¹æį® åĶ¯ä¸Ģ Tag ĊĠĠĠĠ Ġ* Ġ@ return Ġ è¢« åĪłéĻ¤ çļĦæķ°æį® çļĦæīĢæľī ä½įç½® ï¼Į èĭ¥ æ²¡æľī æķ°æį® è¢« åĪłéĻ¤ åĪĻ ä¸ºç©º çļĦ æķ°ç»Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove More Data ( more Data : ĠList < Unique Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremove Data Ġ= ĠHashMap < Simple List Data < out ĠUnique Data >, ĠArrayList < Simple List Data < out ĠUnique Data >> >() ĊĠĠĠĠĠĠĠ Ġmore Data . forEach Ġ{ Ġremove Target Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map . keys . forEach Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map [ group ]?. forEach Indexed Ġ{ Ġindex , Ġsimple List Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remove Target . unique Tag () Ġ== Ġsimple List Data . unique Tag ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remove Data [ group ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Data [ group ] Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Data [ group ]?. add ( simple List Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( remove Data . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġremove Data . keys . forEach { group -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Position Ġ= Ġgroup List . indexOf ( group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Data [ group ]?. forEach Ġ{ child -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Position Ġ= Ġchild Map [ group ]?. indexOf ( child ) ?: - 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( c Position Ġ== Ġ- 1 ) return ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Map [ group ]?. remove ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex Manager . notify Child Item Removed ( g Position Ġ, Ġc Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪłéĻ¤ ä¸Ģ ç»Ħ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġremove GroupData ( group Data : Unique Data Ġ, Ġfake : ĠBoolean Ġ= Ġfalse ): Int { ĊĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġgroup Simple List Data Ġ: ĠSimple List Data < out ĠUnique Data >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġgroup List . forEach Indexed { index Ġ, Ġgroup -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( group . unique Tag () Ġ== Ġgroup Data . unique Tag ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Simple List Data Ġ= Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( position Ġ== Ġ- 1 Ġ|| Ġfake ) return Ġposition ĊĠĠĠĠĠĠĠ Ġgroup List . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġchild Map . remove ( group Simple List Data ) ĊĠĠĠĠĠĠĠ Ġex Manager . notify Group Item Removed ( position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¸ ħ ç©º è¡¨ åĨħå®¹ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ç§»éĻ¤ äºĨ å¤ļå°ĳ æĿ¡ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Data (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġgroup List . size ĊĠĠĠĠĠĠĠ Ġgroup List . clear () ĊĠĠĠĠĠĠĠ Ġchild Map . clear () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Child Count ( group Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Map [ group List [ group Position ]] ?. size Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Check Can Expand Or Collapse Group ( holder : ĠExpand able Basic ViewHolder < out ĠUnique Data >, Ġgroup Position : ĠInt , Ġx : ĠInt , Ġy : ĠInt , Ġexpand : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Group ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠExpand able Basic ViewHolder < out ĠUnique Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Holder Map . contains ( view Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild ViewHolder ( LayoutInflater . from ( parent ?. context ). inflate ( view Type , Ġparent , Ġfalse ), ĠviewHolder Map [ view Type ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault ViewHolder ( LayoutInflater . from ( parent ?. context ). inflate ( R . layout . recycler _ view _ un processed _ data , Ġparent , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Child ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠExpand able Basic ViewHolder < out ĠUnique Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Holder Map . contains ( view Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild ViewHolder ( LayoutInflater . from ( parent ?. context ). inflate ( view Type , Ġparent , Ġfalse ), ĠviewHolder Map [ view Type ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault ViewHolder ( LayoutInflater . from ( parent ?. context ). inflate ( R . layout . recycler _ view _ un processed _ data , Ġparent , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget GroupId ( group Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup List [ group Position ]. id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind Child ViewHolder ( holder : ĠExpand able Basic ViewHolder < out ĠUnique Data >, Ġgroup Position : ĠInt , Ġchild Position : ĠInt , Ġview Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠDefault ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . apply Data ( group List [ group Position ], Ġgroup Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġchild Map [ group List [ group Position ]] ?. get ( child Position )?. list Data ?. let Ġ{ Ġ( holder Ġas ĠExpand able Basic ViewHolder < Unique Data >). apply Data ( it , Ġchild Position ) Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind Group ViewHolder ( holder : ĠExpand able Basic ViewHolder < out ĠUnique Data >, Ġgroup Position : ĠInt , Ġview Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠDefault ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . apply Data ( group List [ group Position ], Ġgroup Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( holder Ġas ĠExpand able Basic ViewHolder < Unique Data >). apply Data ( group List [ group Position ]. list Data , Ġgroup Position ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Child Id ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Map [ group List [ group Position ]] ?. get ( child Position )?. id Ġ?: Ġ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgroup List . size ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Child Item ViewType ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( child Map [ group List [ group Position ]] ?. size Ġ?: Ġ 0 Ġ> Ġchild Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild Map [ group List [ group Position ]] ?. get ( child Position )?. layout Res ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠR . layout . recycler _ view _ un processed _ data ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . recycler _ view _ un processed _ data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Item ViewType ( group Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( group Position Ġ< Ġgroup List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgroup List [ group Position ]. layout Res ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . recycler _ view _ un processed _ data ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® Basic ViewHolder çĽ¸åħ³ Class å®ŀä¾ĭ åĮĸ ç±» å¹¶ ä¼łéĢĴ åıĤæķ° ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġ# onCreate ViewHolder Ġä¸Ń å¯¹åºĶ å¸ĥå±Ģ çļĦ å®ŀä¾ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġcls ĠBasic ViewHolder . class ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild ViewHolder ( view : ĠView , Ġcls : ĠClass < out ĠExpand able Basic ViewHolder < out ĠUnique Data >> ): ĠExpand able Basic ViewHolder < out ĠUnique Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// å¤ĦçĲĨ ViewHolder ä¸º åĨħéĥ¨ ç±»çļĦ æĥħåĨµ ĊĠĠĠĠĠĠĠ Ġcls . construct ors [ 0 ]?. parameter Types ?. let Ġ{ Ġparameter Types Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parameter Types . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġcls . get Constructor ( parameter Types [ 0 ], ĠView :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstructor . newInstance ( owner , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġcls . get Constructor ( View :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġconstructor . newInstance ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ģä¸ª é»ĺè®¤ çļĦ ViewHolder ĊĠĠĠĠ Ġ* Ġ çĶ¨äºİ éĺ² æŃ¢ çĸ ı å¿½ å¯¼èĩ´ å´ © æº ĥ ï¼Į å¹¶ åľ¨ å®ŀéĻħ çķĮéĿ¢ ä¸Ĭ æĺ¾ç¤º åĩº åħ·ä½ĵ éĹ®é¢ĺ ĊĠĠĠĠ Ġ* Ġ è¿Ļ åĲĮæĹ¶ ä¹Ł æĺ¯ä¸Ģä¸ª ViewHolder çļĦ ä¾ĭåŃĲ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠDefault ViewHolder ( item View : ĠView ) Ġ: ĠSimple Expand able Adapter . Expand able Basic ViewHolder < Simple List Data < out ĠUnique Data >>( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠtextView : ĠAppCompat TextView Ġ= ĠitemView . findViewById ( R . id . text ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ æ³¨æĦı [ position ] æĺ¯ åĪĽå»º ViewHolder æĹ¶ çļĦæķ°æį® ä½įç½® ï¼Į ä¸įä¼ļ éļı çĿĢ åĪĹè¡¨ çļĦ åıĺåĮĸ èĢĮ æĽ´æĸ° ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Data ( data : ĠSimple List Data < out ĠUnique Data >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠitemView . context . getString ( R . string . simple _ recycler _ view _ adapter _ un processed _ data ). format ( data . layout Res , Ġdata . unique Tag ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġabstract Ġclass ĠExpand able Basic ViewHolder < T Ġ: ĠUnique Data >( item View : ĠView ) Ġ: ĠAbstract Expand able Item ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġapply Data ( data : ĠT , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç®Ģåįķ åĪĹè¡¨ æķ°æį® ç±» ĊĠĠĠĠ Ġ* Ġå°Ĩ Unique Data ä¸İ å¸ĥå±Ģ èµĦæºĲ è¿Ľè¡Į ç»ĳå®ļ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠSimple List Data < T Ġ: ĠUnique Data >( val Ġlist Data : ĠT , Ġ@ Layout Res Ġval Ġlayout Res : ĠInt ) Ġ: ĠUnique Data Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġunique Tag () Ġ= Ġlist Data . unique Tag () ĊĠĠĠ Ġ} Ċ }