package Ġcom . example . hw 3 . avatar selection . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . hw 3 . R Ċ import Ġcom . example . hw 3 . avatar selection . model . Data Ċ Ċ class ĠRe cycler Adapter ( private Ġval Ġcontext : ĠContext , Ġvar Ġlist : ĠArrayList < Data >) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġ// ĠThese Ġglobal Ġvariables Ġhelp Ġselecting Ġand Ġde select ing Ġav atars ĊĠĠĠ Ġvar Ġselected Item Pos Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġlast ItemSelected Pos Ġ= Ġ- 1 ĊĊĠĠĠ Ġ// ĠIndic ators Ġfor Ġview Ġtypes ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVIEW _ TYPE _ ONE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVIEW _ TYPE _ TWO Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFirst Ġview , Ġtakes Ġthe Ġwhole Ġfirst Ġrow Ġof Ġthe ĠGrid Layout ĊĠĠĠ Ġprivate Ġinner Ġclass ĠView 1 ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmessage : ĠTextView Ġ= ĠitemView . findViewById ( R . id . avatar _ text ) ĠĠĠĠ Ġ// ĠGet Ġthe Ġtext view Ġhere ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cycler ViewModel Ġ= Ġlist [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . text Ġ= Ġre cycler ViewModel . text ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChange Ġit Ġhere ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSecond Ġview , Ġrepresents Ġthe Ġav atars ĊĠĠĠ Ġprivate Ġinner Ġclass ĠView 2 ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġavatar : ĠImageView Ġ= ĠitemView . findViewById ( R . id . avatar _ image ) ĠĠĠ Ġ// ĠGet Ġimage view Ġhere ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cycler ViewModel Ġ= Ġlist [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler ViewModel . avatar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar . setImage Resource ( it ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġit 's Ġnot Ġnull , Ġthen Ġpopulate Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠWhat Ġis Ġmeant Ġby Ġcheckbox Ġhere Ġis Ġthe Ġimage view Ġunder Ġthe Ġav atars Ġwhich ĊĠĠĠĠĠĠĠ Ġgets Ġchanged Ġby Ġuser 's Ġselection ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcheckbox : ĠImageView Ġ= ĠitemView . findViewById ( R . id . checkbox _ icon ) ĊĠĠĠĠĠĠĠ Ġfun Ġdefault () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox . setImage Resource ( 0 ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMean ing , Ġno Ġimage Ġsource ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġselected () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox . setImage Resource ( R . drawable . ic _ checked ) ĠĠĠ Ġ// ĠSet Ġit Ġchecked ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWh atever Ġposition Ġthe Ġadapter Ġgives , Ġselected position Ġgets Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthen Ġwe Ġnotify Ġthe Ġob servers Ġabout Ġthat Ġsomething Ġhas Ġbeen Ġchanged Ġin Ġthe Ġlogic ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Pos Ġ= Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast ItemSelected Pos Ġ= Ġif Ġ( last ItemSelected Pos Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Pos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( last ItemSelected Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Pos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( selected Item Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHere Ġwe Ġselect Ġif Ġthe Ġmodel Ġwants Ġthe Ġfirst Ġview , Ġthe Ġtext , Ġor Ġthe Ġsecond Ġview , Ġthe Ġavatar ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠVIEW _ TYPE _ ONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView 1 ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . row _ text , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView 2 ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . row _ avatar , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠBasic Ġon Bind Ġfunction Ġbut Ġwhat Ġit Ġalso Ġdoes Ġis Ġif Ġselected item Ġis Ġreally ĊĠĠĠ Ġeq a ul Ġto Ġthe Ġposition Ġthen Ġchange Ġit 's Ġimage view Ġvia Ġselected () ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list [ position ]. view Type Ġ== ĠVIEW _ TYPE _ ONE Ġ&& Ġholder Ġis ĠView 1 ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( position ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠView 2 ViewHolder ). bind ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġselected Item Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . selected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . default () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlist [ position ]. view Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġlist . size Ċ }