package Ġcom . sim on . recent . features . recycle View Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view binding . View Binding Ċ import Ġcom . bump tech . glide . Priority Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . sim on . image load . G lide Image Loader Ċ import Ġcom . sim on . recent . features . R Ċ import Ġcom . sim on . recent . features . databinding . Animal Concat Row Binding Ċ import Ġcom . sim on . recent . features . databinding . Animal s Row Binding Ċ import Ġcom . sim on . recent . features . databinding . B reed s Row Binding Ċ Ċ data Ġclass ĠAnimal ( val Ġname : ĠString , Ġval Ġimage : ĠString ) Ċ Ċ data Ġclass ĠB reed ( val Ġname : ĠString ) Ċ Ċ abstract Ġclass ĠBase ViewHolder < T >( binding : ĠView Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġbind ( item : ĠT , Ġposition : ĠInt ) Ċ } Ċ Ċ abstract Ġclass ĠBase Concat Holder < T >( binding : ĠView Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġbind ( adapter : ĠT ) Ċ } Ċ Ċ class ĠAnimal Adapter ( private Ġval Ġcontext : ĠContext ) Ġ: ĠRecyclerView . Adapter < Base ViewHolder <* >>() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġanimal List Ġ= Ġmutable ListOf < Animal >() ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠITE MS _ PER _ PAGE Ġ= Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Width : ĠInt Ġ= Ġparent . width Ġ/ ĠITE MS _ PER _ PAGE ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠAnimal s Row Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params : ĠViewGroup . LayoutParams Ġ= Ġbinding . root . layout Params ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġitem Width ĊĠĠĠĠĠĠĠ Ġbinding . root . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġreturn ĠAnimal ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( animal List . size Ġ> Ġ 0 ) Ġanimal List . size Ġelse Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Animal s ( animal List : ĠMutable List < Animal >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . animal List Ġ= Ġanimal List ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetItem ( position : ĠInt ): ĠAnimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġanimal List [ position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase ViewHolder <* >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimal Obj Ġ= Ġanimal List [ position ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAnimal ViewHolder Ġ-> Ġholder . bind ( animal Obj , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" No Ġview holder Ġto Ġshow Ġthis Ġdata , Ġdid Ġyou Ġforgot Ġto Ġadd Ġit Ġto Ġthe Ġon Bind ViewHolder ?") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠAnimal ViewHolder ( private Ġval Ġbinding : ĠAnimal s Row Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase ViewHolder < Animal >( binding ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( item : ĠAnimal , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions : ĠRequest Options Ġ= ĠRequest Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ pic _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. priority ( Priority . HIGH ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide Image Loader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . animal Image , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). load ( item . image , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . animal Name . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDog B reed Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ċ ) Ġ: ĠRecyclerView . Adapter < Base ViewHolder <* >>() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdog Bre edList Ġ= Ġmutable ListOf < B reed >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDog B reed ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB reed s Row Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdog Bre edList . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase ViewHolder <* >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDog B reed ViewHolder Ġ-> Ġholder . bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdog Bre edList [ position ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" No Ġview holder Ġto Ġshow Ġthis Ġdata , Ġdid Ġyou Ġforgot Ġto Ġadd Ġit Ġto Ġthe Ġon Bind ViewHolder ?") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset B reed s ( dog Bre edList : ĠMutable List < B reed >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dog Bre edList Ġ= Ġdog Bre edList ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠDog B reed ViewHolder ( private Ġval Ġbinding : ĠB reed s Row Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase ViewHolder < B reed >( binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( item : ĠB reed , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bre ed Name . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBase Grid Concat Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġanimal Adapter : ĠAnimal Adapter , ĊĠĠĠ Ġprivate Ġval Ġspan Count : ĠInt Ċ ) Ġ: ĠRecyclerView . Adapter < Base Concat Holder <* >>() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase Concat Holder < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimal Concat Row Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . rv Animal Concat . layout Manager Ġ= ĠGrid LayoutManager ( context , Ġspan Count ) ĊĠĠĠĠĠĠĠ Ġreturn ĠConcat ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase Concat Holder <* >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConcat ViewHolder Ġ-> Ġholder . bind ( animal Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" No Ġview holder Ġto Ġshow Ġthis Ġdata , Ġdid Ġyou Ġforgot Ġto Ġadd Ġit Ġto Ġthe Ġon Bind ViewHolder ?") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠConcat ViewHolder ( private Ġval Ġbinding : ĠAnimal Concat Row Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase Concat Holder < Animal Adapter >( binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( adapter : ĠAnimal Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . rv Animal Concat . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }