/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġpan pf Ġ< pan p fp an pf @ outlook . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . github . pan pf . assembly adapter . list . expand able Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Base Expand able ListAdapter Ċ import Ġcom . github . pan pf . assembly adapter . list . expand able . Concat Expand able ListAdapter . Config Ċ import Ġcom . github . pan pf . assembly adapter . list . expand able . Concat Expand able ListAdapter . Config . Stable Id Mode Ċ import Ġcom . github . pan pf . assembly adapter . list . expand able . internal . Concat Expand able ListAdapter Controller Ċ import Ġjava . util . Collections Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ Base Expand able ListAdapter ] Ġimplementation Ġthat Ġpresents Ġthe Ġcontents Ġof Ġmultiple Ġadapters Ġin Ġsequence . Ċ Ġ* Ċ Ġ* Ġ@ param Ġconfig ĠĠ ĠThe Ġconfiguration Ġfor Ġthis ĠConcat Expand able ListAdapter Ċ Ġ* Ġ@ param Ġadapters ĠThe Ġlist Ġof Ġadapters Ġto Ġadd Ċ Ġ* Ġ@ see ĠConfig . Builder Ċ Ġ*/ Ċ open Ġclass ĠConcat Expand able ListAdapter ( ĊĠĠĠ Ġconfig : ĠConfig , Ġadapters : ĠList < Base Expand able ListAdapter > Ċ ) Ġ: ĠBase Expand able ListAdapter () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNO _ ID : ĠLong Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Concat Expand able ListAdapter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBulk Ġof Ġthe Ġlogic Ġis Ġin Ġthe Ġcontroller Ġto Ġkeep Ġthis Ġclass Ġisolated Ġto Ġthe Ġpublic ĠAPI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Controller : ĠConcat Expand able ListAdapter Controller Ġ= ĊĠĠĠĠĠĠĠ ĠConcat Expand able ListAdapter Controller ( this , Ġconfig , Ġadapters ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġun modifiable Ġcopy Ġof Ġthe Ġlist Ġof Ġadapters Ġin Ġthis Ġ[ Concat Expand able ListAdapter ]. ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġthis Ġis Ġa Ġcopy Ġhence Ġfuture Ġchanges Ġin Ġthe ĠConcat Expand able ListAdapter Ġare Ġnot Ġreflected Ġin ĊĠĠĠĠ Ġ* Ġthis Ġlist . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġcopy Ġof Ġthe Ġlist Ġof Ġadapters Ġin Ġthis ĠConcat Expand able ListAdapter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġadapters : ĠList < Base Expand able ListAdapter > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCollections . unmodifiable List ( m Controller . copyOf Adapters ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠConcat Expand able ListAdapter Ġwith Ġ[ Config . DEFAULT ] Ġand Ġthe Ġgiven Ġadapters Ġin Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġorder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġadapters ĠThe Ġlist Ġof Ġadapters Ġto Ġadd ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( adapters : ĠList < Base Expand able ListAdapter >) Ġ: Ġthis ( Config . DEFAULT , Ġadapters ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠConcat Expand able ListAdapter Ġwith Ġthe Ġgiven Ġconfig Ġand Ġthe Ġgiven Ġadapters Ġin Ġthe Ġgiven Ġorder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconfig ĠĠ ĠThe Ġconfiguration Ġfor Ġthis ĠConcat Expand able ListAdapter ĊĠĠĠĠ Ġ* Ġ@ param Ġadapters ĠThe Ġlist Ġof Ġadapters Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ see ĠConfig . Builder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( config : ĠConfig , Ġvar arg Ġadapters : ĠBase Expand able ListAdapter ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġconfig , ĊĠĠĠĠĠĠĠ Ġadapters . toList () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠConcat Expand able ListAdapter Ġwith Ġ[ Config . DEFAULT ] Ġand Ġthe Ġgiven Ġadapters Ġin Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġorder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġadapters ĠThe Ġlist Ġof Ġadapters Ġto Ġadd ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( var arg Ġadapters : ĠBase Expand able ListAdapter ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ ĠConfig . DEFAULT , ĊĠĠĠĠĠĠĠ Ġadapters . toList () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApp ends Ġthe Ġgiven Ġadapter Ġto Ġthe Ġexisting Ġlist Ġof Ġadapters Ġand Ġnot ifies Ġthe Ġob servers Ġof ĊĠĠĠĠ Ġ* Ġthis Ġ[ Concat Expand able ListAdapter ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġadapter ĠThe Ġnew Ġadapter Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġadapter Ġis Ġsuccessfully Ġadded Ġbecause Ġit Ġdid Ġnot Ġalready Ġexist , ĊĠĠĠĠ Ġ* Ġ` false ` Ġotherwise . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. add Adapter ĊĠĠĠĠ Ġ* Ġ@ see Ġ. remove Adapter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġadd Adapter ( adapter : ĠBase Expand able ListAdapter ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . add Adapter ( adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġadapter Ġto Ġthe Ġgiven Ġindex Ġamong Ġother Ġadapters Ġthat Ġare Ġalready Ġadded . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠĠ ĠThe Ġindex Ġinto Ġwhich Ġto Ġinsert Ġthe Ġadapter . ĠConcat Expand able ListAdapter Ġwill Ġthrow Ġan ĊĠĠĠĠ Ġ* Ġ[ Index OutOfBoundsException ] Ġif Ġthe Ġindex Ġis Ġnot Ġbetween Ġ 0 Ġand Ġcurrent ĊĠĠĠĠ Ġ* Ġadapter Ġcount Ġ( inclusive ). ĊĠĠĠĠ Ġ* Ġ@ param Ġadapter ĠThe Ġnew Ġadapter Ġto Ġadd Ġto Ġthe Ġadapters Ġlist . ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġadapter Ġis Ġsuccessfully Ġadded Ġbecause Ġit Ġdid Ġnot Ġalready Ġexist , ĊĠĠĠĠ Ġ* Ġ` false ` Ġotherwise . ĊĠĠĠĠ Ġ* Ġ@ see Ġ. add Adapter ĊĠĠĠĠ Ġ* Ġ@ see Ġ. remove Adapter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġadd Adapter ( index : ĠInt , Ġadapter : ĠBase Expand able ListAdapter ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . add Adapter ( index , Ġadapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġgiven Ġadapter Ġfrom Ġthe Ġadapters Ġlist Ġif Ġit Ġexists ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġadapter ĠThe Ġadapter Ġto Ġremove ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġadapter Ġwas Ġpreviously Ġadded Ġto Ġthis Ġ` Concat Expand able ListAdapter ` Ġand ĊĠĠĠĠ Ġ* Ġnow Ġremoved Ġor Ġ` false ` Ġif Ġit Ġcouldn 't Ġbe Ġfound . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġremove Adapter ( adapter : ĠBase Expand able ListAdapter ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . remove Adapter ( adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġitem Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Controller . group Count ĊĊĠĠĠ Ġfun ĠgetItem Data ( position : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getGroup ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . group Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group ( group Position : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getGroup ( group Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget GroupId ( group Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . get GroupId ( group Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Type Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . group Type Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Type ( group Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getGroup Type ( group Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group View ( ĊĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , Ġis Expanded : ĠBoolean , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getGroup View ( group Position , Ġis Expanded , ĠconvertView , Ġparent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children Count ( group Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getChildren Count ( group Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getChild ( group Position , Ġchild Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child Id ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getChild Id ( group Position , Ġchild Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child Type Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . child Type Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child Type ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getChild Type ( group Position , Ġchild Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child View ( ĊĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , Ġchild Position : ĠInt , Ġis Last Child : ĠBoolean , ĊĠĠĠĠĠĠĠ ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . getChild View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Position , Ġchild Position , Ġis Last Child , ĠconvertView , Ġparent ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Stable Ids (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . has Stable Ids () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Child Selectable ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . is Child Selectable ( group Position , Ġchild Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Group Collapsed ( group Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Controller . on Group Collapsed ( group Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Group Expanded ( group Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Controller . on Group Expanded ( group Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġfind Local Adapter And Position ( position : ĠInt ): ĠPair < Base Expand able ListAdapter , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Controller . find Local Adapter And Position ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġconfiguration Ġobject Ġfor Ġa Ġ[ Concat Expand able ListAdapter ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠConfig Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġ` false `, Ġ[ Concat Expand able ListAdapter ] Ġassumes Ġall Ġassigned Ġadapters Ġshare Ġa Ġglobal ĊĠĠĠĠĠĠĠĠ Ġ* Ġview Ġtype Ġpool Ġsuch Ġthat Ġthey Ġuse Ġthe Ġsame Ġview Ġtypes Ġto Ġrefer Ġto Ġthe Ġsame ĠconvertView . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠSetting Ġthis Ġto Ġ` false ` Ġwill Ġallow Ġnested Ġadapters Ġto Ġshare Ġconvert Views Ġbut ĊĠĠĠĠĠĠĠĠ Ġ* Ġit Ġalso Ġmeans Ġthese Ġadapters Ġshould Ġnot Ġhave Ġconflicting Ġview Ġtypes ĊĠĠĠĠĠĠĠĠ Ġ* Ġ([ Base Expand able ListAdapter . getGroup Type ] Ġor Ġ[ Base Expand able ListAdapter . getChild Type ]) Ġsuch Ġthat Ġtwo Ġdifferent Ġadapters Ġreturn Ġthe Ġsame ĊĠĠĠĠĠĠĠĠ Ġ* Ġview Ġtype Ġfor Ġdifferent Ġconvert Views . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠBy Ġdefault , Ġit Ġis Ġset Ġto Ġ` true ` Ġwhich Ġmeans Ġ[ Concat Expand able ListAdapter ] Ġwill Ġisolate ĊĠĠĠĠĠĠĠĠ Ġ* Ġview Ġtypes Ġacross Ġadapters , Ġprevent ing Ġthem Ġfrom Ġusing Ġthe Ġsame Ġconvert Views . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġisolate View Types : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefines Ġwhether Ġthe Ġ[ Concat Expand able ListAdapter ] Ġshould Ġsupport Ġstable Ġids Ġor Ġnot ĊĠĠĠĠĠĠĠĠ Ġ* Ġ([ Base Expand able ListAdapter . has Stable Ids ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThere Ġare Ġ 3 Ġpossible Ġoptions : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Stable Id Mode . NO _ ST ABLE _ IDS ]: ĠIn Ġthis Ġmode , Ġ[ Concat Expand able ListAdapter ] Ġignores Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġstable ĊĠĠĠĠĠĠĠĠ Ġ* Ġids Ġreported Ġby Ġsub Ġadapters . ĠThis Ġis Ġthe Ġdefault Ġmode . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Stable Id Mode . IS OL ATED _ ST ABLE _ IDS ]: ĠIn Ġthis Ġmode , Ġ[ Concat Expand able ListAdapter ] Ġwill Ġreturn ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` true ` Ġfrom Ġ[ Concat Expand able ListAdapter . has Stable Ids ] Ġand Ġwill Ġ** require ** Ġall Ġadded ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Base Expand able ListAdapter ] s Ġto Ġhave Ġstable Ġids . ĠAs Ġtwo Ġdifferent Ġadapters Ġmay Ġreturn Ġsame Ġstable Ġids ĊĠĠĠĠĠĠĠĠ Ġ* Ġbecause Ġthey Ġare Ġun aware Ġof Ġeach - other , Ġ[ Concat Expand able ListAdapter ] Ġwill Ġisolate Ġeach ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Base Expand able ListAdapter ]' s Ġid Ġpool Ġfrom Ġeach Ġother Ġsuch Ġthat Ġit Ġwill Ġoverwrite Ġthe Ġreported Ġstable ĊĠĠĠĠĠĠĠĠ Ġ* Ġid Ġbefore Ġreporting Ġback Ġto Ġthe Ġ[ android . widget . Expand able ListView ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Stable Id Mode . SHARED _ ST ABLE _ IDS ]: ĠIn Ġthis Ġmode , Ġ[ Concat Expand able ListAdapter ] Ġwill Ġreturn ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` true ` Ġfrom Ġ[ Concat Expand able ListAdapter . has Stable Ids ] Ġand Ġwill Ġ** require ** Ġall Ġadded ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Base Expand able ListAdapter ] s Ġto Ġhave Ġstable Ġids . ĠUn like Ġ[ Stable Id Mode . IS OL ATED _ ST ABLE _ IDS ], ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Concat Expand able ListAdapter ] Ġwill Ġnot Ġoverride Ġthe Ġreturned Ġitem Ġids . ĠIn Ġthis Ġmode , ĊĠĠĠĠĠĠĠĠ Ġ* Ġchild Ġ[ Base Expand able ListAdapter ] s Ġmust Ġbe Ġaware Ġof Ġeach - other Ġand Ġnever Ġreturn Ġthe Ġsame Ġid Ġunless ĊĠĠĠĠĠĠĠĠ Ġ* Ġan Ġitem Ġis Ġmoved Ġbetween Ġ[ Base Expand able ListAdapter ] s . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġvalue Ġis Ġ[ Stable Id Mode . NO _ ST ABLE _ IDS ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġstable Id Mode : ĠSt able Id Mode ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠDefault Ġconfiguration Ġfor Ġ[ Concat Expand able ListAdapter ] Ġwhere Ġ[ isolate View Types ] ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġis Ġset Ġto Ġ` true ` Ġand Ġ[ stable Id Mode ] Ġis Ġset Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Stable Id Mode . NO _ ST ABLE _ IDS ]. ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠDEFAULT Ġ= ĠConfig ( true , ĠSt able Id Mode . NO _ ST ABLE _ IDS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefines Ġhow Ġ[ Concat Expand able ListAdapter ] Ġhandle Ġstable Ġids Ġ([ Base Expand able ListAdapter . has Stable Ids ]). ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠSt able Id Mode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIn Ġthis Ġmode , Ġ[ Concat Expand able ListAdapter ] Ġignores Ġthe Ġstable ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġids Ġreported Ġby Ġsub Ġadapters . ĠThis Ġis Ġthe Ġdefault Ġmode . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAdding Ġan Ġ[ Base Expand able ListAdapter ] Ġwith Ġstable Ġids Ġwill Ġresult Ġin Ġa Ġwarning Ġas Ġit Ġwill Ġbe ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġignored . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ ST ABLE _ IDS , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIn Ġthis Ġmode , Ġ[ Concat Expand able ListAdapter ] Ġwill Ġreturn Ġ` true ` Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Concat Expand able ListAdapter . has Stable Ids ] Ġand Ġwill Ġ** require ** Ġall Ġadded ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Base Expand able ListAdapter ] s Ġto Ġhave Ġstable Ġids . ĠAs Ġtwo Ġdifferent Ġadapters Ġmay Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġsame Ġstable Ġids Ġbecause Ġthey Ġare Ġun aware Ġof Ġeach - other , Ġ[ Concat Expand able ListAdapter ] Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġisolate Ġeach Ġ[ Base Expand able ListAdapter ]' s Ġid Ġpool Ġfrom Ġeach Ġother Ġsuch Ġthat Ġit Ġwill Ġoverwrite ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġreported Ġstable Ġid Ġbefore Ġreporting Ġback Ġto Ġthe Ġ[ android . widget . Expand able ListView ]. ĠIn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġmode , Ġthe Ġvalue Ġreturned Ġfrom Ġ([ Base Expand able ListAdapter . get GroupId ] Ġor Ġ[ Base Expand able ListAdapter . getChild Id ]) Ġmight Ġdiffer Ġfrom Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġvalue Ġreturned Ġfrom Ġ([ Base Expand able ListAdapter . get GroupId ] Ġor Ġ[ Base Expand able ListAdapter . getChild Id ]). ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAdding Ġan Ġadapter Ġwithout Ġstable Ġids Ġwill Ġresult Ġin Ġan ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ IllegalArgumentException ]. ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIS OL ATED _ ST ABLE _ IDS , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIn Ġthis Ġmode , Ġ[ Concat Expand able ListAdapter ] Ġwill Ġreturn Ġ` true ` Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Concat Expand able ListAdapter . has Stable Ids ] Ġand Ġwill Ġ** require ** Ġall Ġadded ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Base Expand able ListAdapter ] s Ġto Ġhave Ġstable Ġids . ĠUn like Ġ[ Stable Id Mode . IS OL ATED _ ST ABLE _ IDS ], ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Concat Expand able ListAdapter ] Ġwill Ġnot Ġoverride Ġthe Ġreturned Ġitem Ġids . ĠIn Ġthis Ġmode , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġchild Ġ[ Base Expand able ListAdapter ] s Ġmust Ġbe Ġaware Ġof Ġeach - other Ġand Ġnever Ġreturn Ġthe Ġsame Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġunless Ġand Ġitem Ġis Ġmoved Ġbetween Ġ[ Base Expand able ListAdapter ] s . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAdding Ġan Ġadapter Ġwithout Ġstable Ġids Ġwill Ġresult Ġin Ġan ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ IllegalArgumentException ]. ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSHARE D _ ST ABLE _ IDS ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġbuilder Ġfor Ġ[ Config ] Ġclass . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Is olate View Types Ġ= ĠDEFAULT . isolate View Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Stable Id Mode Ġ= ĠDEFAULT . stable Id Mode ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠSets Ġwhether Ġ[ Concat Expand able ListAdapter ] Ġshould Ġisolate Ġview Ġtypes Ġof Ġnested Ġadapters Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġeach Ġother . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġisolate View Types Ġ` true ` Ġif Ġ[ Concat Expand able ListAdapter ] Ġshould Ġoverride Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġtypes Ġof Ġnested Ġadapters Ġto Ġavoid Ġview Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġconflicts , Ġ` false ` Ġotherwise . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠDefaults Ġto Ġ[ Config . DEFAULT ]' s ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ isolate View Types ] Ġvalue Ġ(` true `). ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ see Ġisolate View Types ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠsetIs olate View Types ( isolate View Types : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is olate View Types Ġ= Ġisolate View Types ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠSets Ġhow Ġthe Ġ[ Concat Expand able ListAdapter ] Ġshould Ġhandle Ġstable Ġids ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ([ Base Expand able ListAdapter . has Stable Ids ]). ĠSee Ġdocumentation Ġin Ġ[ stable Id Mode ] ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġfor Ġdetails . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġstable Id Mode ĠThe Ġstable Ġid Ġmode Ġfor Ġthe Ġ[ Concat Expand able ListAdapter ]. ĠDefaults Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ[ Config . DEFAULT ]' s Ġ[ stable Id Mode ] Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ([ Stable Id Mode . NO _ ST ABLE _ IDS ]). ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ see Ġstable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġset Stable Id Mode ( stable Id Mode : ĠSt able Id Mode ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Stable Id Mode Ġ= Ġstable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew Ġinstance Ġof Ġ[ Config ] Ġwith Ġthe Ġgiven Ġparameters . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConfig ( m Is olate View Types , Ġm Stable Id Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }