package Ġcom . fl x rs . d ank chat . chat . menu Ċ Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . fl x rs . d ank chat . databinding . Em ote Menu Tab Binding Ċ Ċ class ĠEm ote Menu Adapter ( private Ġval Ġon Em ote Click : Ġ( em ote : ĠString ) Ġ-> ĠUnit ) Ġ: ĠList Adapter < List < Em ote Item >, ĠEm ote Menu Adapter . ViewHolder >( Detect Diff ()) Ġ{ ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( val Ġadapter : ĠEm ote Adapter , Ġbinding : ĠEm ote Menu Tab Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= ĠEm ote Menu Tab . values (). size ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġem ote Adapter Ġ= ĠEm ote Adapter ( on Em ote Click ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( em ote Adapter , ĠEm ote Menu Tab Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Land scape Ġ= Ġparent . resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġif Ġ( is Land scape ) Ġ 1 2 Ġelse Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġem ote List . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( parent . context , Ġspan Count ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( em ote Adapter . getItem ViewType ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEm ote Adapter . ITEM _ VIEW _ TYPE _ HEADER Ġ-> Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġem ote Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( object Ġ: ĠRecyclerView . Item Decoration () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġem otes Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . adapter . submit List ( em otes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDetect Diff Ġ: ĠDiff Util . Item Callback < List < Em ote Item >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠList < Em ote Item >, Ġnew Item : ĠList < Em ote Item >): ĠBoolean Ġ= Ġold Item Ġ== Ġnew Item ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠList < Em ote Item >, Ġnew Item : ĠList < Em ote Item >): ĠBoolean Ġ= Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ }