package Ġbe . digital ia . fos dem . fragments Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . paging . Paged ListAdapter Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġbe . digital ia . fos dem . R Ċ import Ġbe . digital ia . fos dem . activities . Person Info Activity Ċ import Ġbe . digital ia . fos dem . adapters . create Simple Item Callback Ċ import Ġbe . digital ia . fos dem . model . Person Ċ import Ġbe . digital ia . fos dem . view models . Pers ons ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠPers ons List Fragment Ġ: ĠFragment ( R . layout . recyclerview _ fast scroll ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠPers ons ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠPers ons Adapter () ĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠRecyclerView ViewHolder ( view ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Divider Item Decoration ( context , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter ( adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Text Ġ= ĠgetString ( R . string . no _ data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ProgressBar Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . persons . observe ( view Lifecycle Owner ) Ġ{ Ġpersons Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( persons ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . is ProgressBar Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPers ons Adapter Ġ: ĠP aged ListAdapter < Person , ĠPerson ViewHolder >( DIFF _ CALLBACK ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠPerson ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . simple _ list _ item _ 1 _ material , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPerson ViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠPerson ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( person Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( person ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠDIFF _ CALLBACK Ġ= Ġcreate Simple Item Callback < Person > Ġ{ Ġold Item , Ġnew Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPerson ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ), ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtextView : ĠTextView Ġ= ĠitemView . findViewById ( android . R . id . text 1 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġperson : ĠPerson ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( person : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . person Ġ= Ġperson ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġperson . name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġview . context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠPerson Info Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( Person Info Activity . EXTRA _ PERSON , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }