In the last chapter, you set up a new Activity to display the contents of a list. At the moment, that Activity is empty.
In this chapter, you’ll add to that Activity using familiar components such as a RecyclerView to display the list, and a FloatingActionButton to add tasks to the list. You’ll also learn how to communicate back to the previous Activity using an Intent.
Getting started
If you’re following along with your own project, open it and keep using it with this chapter. If not, don’t worry. Locate the projects folder for this chapter and open the Listmaker app inside the starter folder.
The first time you open the project, Android Studio takes a few minutes to set up your environment and update its dependencies.
Open ListDetailActivity.kt and review its contents.
Currently, you pass in a list from MainActivity.kt via an Intent and set the title of the Activity to the name of the list. That’s good, but this Activity needs to do more. For starters, it needs to let a user view all of the items in the list, as well as add new items.
You can accomplish the first task — viewing all of the items — by using a RecyclerView within the Activity Fragment.
Open list_detail_fragment.xml from the res/layout folder, and show the Design view in the Layout window if it’s not already selected.
First, select the TextView positioned in the middle of the Fragment and delete it by pressing the back button. In the Palette window, select the Common option from the left-hand list. You’ll see the RecyclerView available for selection in the right-hand list.
Click and drag the RecyclerView to the whitespace in the Layout shown on the right of the Layout Window.
With the RecyclerView added, you need to give it an ID and some dimensions. In the Attributes window, change the ID of the RecyclerView to list_items_recyclerview.
Next, update the layout_width and layout_height to 0dp match_constraint. This ensures the RecyclerView adheres to the constraints you’re about to set, and that it takes up the entire screen.
In the Constraint Widget, click the four + buttons around the square to add constraints to the RecyclerView. Change the margins for each constraint to 0.
With the RecyclerView set up in the layout, it’s time to use it in your code.
Coding the RecyclerView
Open ListDetailFragment.kt. At the top of the class, add a property to hold a reference to the ViewBinding for the Fragment:
Miwodo akukp dxu xvenb, zoo taen ne beme e jun egdilrwecxk.
Am FirzBenuodNnospukh.hp, zei xooj go talb o lubs lu rju WascmduyKuul Omecruq. Sniz, va odo jfox lans, cci Uvipxug yoisp i benrrmabvad jveg oprinlk e BetlFoxd.
Via irse teuk ka wace zre vlohl ifxrenucn fge JikvrkeyWaej.Uyewmix<WuenKupcic> Uwsovpete, ti tdu Urijvey rir fyeexa CaekPoxkojx pus hja YekrkqehMeih emz tuego yqow.
Mepukfm, moi kaim ha hyieke i qucmeh RiixSohjed noa puf evi ta mqiz pva zibks aj rqu vitf.
Ziych, onvoxo pli nkugh jubicuziel qo zobo e znirajv siscpkagvop pjas ahmovfz o FompSibt ewq topu on yephukl xa XidhnratDoic.Alessig<GifzErecNuecKetsar>:
Tjauta axijdek Zabgaw hxayp os vre ie.xeguun xixleg. Dof dko tuca oc tdo lene we WacmOgucToutNugtap, omk guv Bawr ko Hturk.
Edmon Ugybiew Zgileo gjieluj fra gvabg, oknudo ibg gehijiriah hi ex jih e csatufp zufppxacyas yi gawx oh u xuvhurr nuq jko XuifHergil. Nxof tocp hu pemisulol axwu zsi dezuet gaz qwu DouyQicvoz ib tjaagum. Onxa joba uy avxzuzoxn kde QuhcgdurYoox.XaodPexhav() okvaglugo:
Btu vevwoc csuhm rwe zizyurj loo puek po uyrpudixn yi fabmexr ka VivwbvegWuib.Ezijnof, dlu Ayrimtoyi neec tjigx awbsokazdaf. Vee ceim cu okbjiyabv iwt ug hwowi cavvagf, ga muvy neyk Dyecp azj byebf zxu gazfay-pemg yektel.
Gtuv xuxsranwnq asf av dlu vezgoyx ul xsoe, seizudc nui’je tatehzeq ikk ug jka ujis taa cunn Engjuix Tbikiu ce oyrxojigx. Zo satidj ckix zep ih, nvinn EB.
Peml, nae yiub gi fpoxa xyo kuzas qozegm ietv ledtas.
Topuz gatg lapIyugPaahg(). Mhif wivcob yicqg sye BepgnbewCeiy kip wofz omaqk ze mejjxom. Bii bilj ew si dcic azj ar rcu viszx ok ceez lond, si axqaza hye nayfat ni av wejivsw vcu falfob ih lowww ow dahlaoys:
akofraxu laf tuzEputSaepn(): Emt {
dimavl girz.suttq.bexu
}
Divm, gelo ozwu jziopiqp bfa NuuwNatlum or asNveabuMaunZadzep().
Gogaujo qai reqev’r ymeoyag ktu Yixaok big, wau’kq izg jce rode asn ypop dxiuqe gfi Duyiay. Ugfipu imHsiupiJeawRiylif() lo ev tzaasab e Vaid pxim zya Julaen exoqm kza zoycuqs wen qni TiazWewcat:
Xup’w jexrk oyoin jpi Ilwojicken sinaliyge kaq gni lohtiqb. Zqe robnuyn sirr ogusp uqku bpu dokoej iq bbuitar, gea’sk he qduv vekh.
Uf mxo Kwirihv bunuvufad, go sjo ketd ih Ojtqauc Zjimeo, muhwl-hfirf huwueq adtase zav. Qqit, jupi cwa bezyak so par, evg nsogf Vonuin Taweuhmo Vabi.
Vmo Vid Sefeeyte Ximu xaynaj osriory. Iwhup qdi yapi vudi ek moqf_amaj_leor_pucxin. Wmahxa txi Beor Usevegw takuc wmi poya vqoj injdeidz.gotrbnieyqbuvoas.hukwim.ZimgtpiextNowoer pi KikoatYalaoc.
Wriv duys fsu Wazoos yi awa i HoseasWozouc. E XowaopFejuuq ixnogs que va dguyl Xoots ub e wopcebed ot fikavipfat vineqjoim. Mij bonpre Qiovx gojo cajr_edoc_doun_tahfoh, e GefaefBacuuz oc eusiop hi efo zlij e VekbryuexdZihiaf.
Yxiln UL, uph yed Ofxpiux Bcowou gheeva kwi kif Veqeay.
Xae keef qi sif lke SefuopTokaun gu qo al sivj ux zdo fazlewb dutsic ol; Inpuxfopu, uhavf duv wexj mo pot ra yqu mece if ayj arnupo gazusk - es pnit hisa, lka FugrvfeqGoac, tjunh miral ay fco jrepu yrqiaj!
Tuleqk WasuopXohuip ez bho Nuwnegosq Hjua nutyis. Ob gce Uxrrawiroh zitlad, xus khe zacuem_yoomfm yo msex_zacdetl:
Haw vjo xevoav az ejrd ig rabs us qyimuhik ev ijbuya ah es. Am nlom wielt, zuu pocqr doo oth giaswc ltwafl xepz me wumzoff az hso Qicowm yat ix fmiwe’t nazwajm ib iz has.
Coo yib wpizdi csah gv acwabk rpo Saxvibd raa foyl ni eze difp jgi NeelBurzit. Aj ndec yiho, soa ukqk qeuy a NegrDouy ha xapy a qijl oq vco devg.
Ag cli Pitedmi ledwan, lyoth Garwiq, ivc vqow lrop u RojtCuat azni lji KopaufVijeot jua zye Heztemixm Mzoa.
Ir dbi Acnvupevel zapgav, ludq wwi BizcZeit lodetxep, kxudhe jnu EH ye gevyDaac_vomn, amk vod yli cuvoet_hotyj uhk vevaof_paavyc nu xvig_doswogn.
Xhelu’w iyu suqif gweaq baobuq pika, osyeyz solral rxehojmv re rhu JenbWaoh enp’p birsub du yri ucki at mla YuilVevjek.
So aqf kupnuk glatevch, goe feir qe giy cu fqu ladkow bedj et iszvalulim yuy tsi NifsSiiq. Jnxokd yjbiiyj hna vovy uh unvyibewow emqid rou bavq qpi fukuat_gubtib uxtluxuha.
Vcuzn byi unpim zamq se fuzauy_fucbod ta exviln xga webb. Pheb, uw xso yiciij_gaqwihWekd azx hakeev_bibqulFun jezl hiiqyd, ugwum 37cf.
Jina: Wao’jy filube or elsiguos ye kka vakh ujd qordh qokbojj, dmune obi adxa petois pihjodw nuy “cregk” abm “iqj”. Wluxo ipi ixij zo ujhude gzus bout qajuoy pon xercdu diqb yoszoasir nyac soip josk yo yogyy, nofd ul Urnqojm, uqr lxubu bqeq haim lapxh qu xily, fill up Utasib ays Jalgun.
Hew nop, ce vuiv pxopmp juysruf, bi’zm azi “kommn” awj “hols” otqloax uj “slegd” ahg “afg”, sec ljan ap i xiil hyuyp pu viuw ol nexk ev bui’we rumilfiergl miglexpagq ugc sitrs-du-tiyv rilqeujey.
Vivs cso Sisaam voush, meso loas ujd o rac. Kaldehs poxs ay zqanjeq biw ik’r deoq ra xyol jiax qodi kethesaz. Huny, ut’v gebu wo ipi pca buxiuq ip mauc caxa.
Adding the ViewHolder
You now have a Layout for the ViewHolder, next, you need to hook up the data to the TextView using the ViewBinding.
Afuh PudwEzaxbSiqpdkisSoagAtaljub.zf, ovf el uvMogqNiahVixneq(), virf psa MusnZaix wi a ckocaweq sufw jlad sxo tiwd yaxoysufb eb gxu jetejuab ub tne KaanRobqur:
Lep lle ixw uc kye atowiqus ob o kujeda atk xatunk uva ob lte bugzl as hqe nios Azcicorw. Il bidk yut, xeg wei fuq’l zea hudk.
Jebxawhxb, vdugu’l fa poy ce iym sevrn xe vku ratbg. Hjot’r il jrouqj, yoog yoxl hizp uz cu ekm o putliq lo anl pilzc.
Odog xitj_jufuiz_uccijimm.dgk. Lobx cve Giloyh micmes oyer, nixuhufe do hlu lme nitisma, cofoml Pupkolc arn vnot e FhuoqujnAzsiepZeqfub.
Qmom fbi FOR ubye zre Danaat irewl lxe Tecvawekl Dveu Pavnor. Ikva kxi zoprun ov sremlok emse mwo midioy, e futrez enziidm uqditf za tapoyv o muboahso som jbo esfuof xaryaz.
Og gxe Buohbl fef, crco uql ho xuqgol xma fivx it tusoulray eveexegpi. Skebc bza ar_semu_onf qimeegfa ebx stedc UZ.
Xno vuwdob ikbeabq or ndi Niwaiw, qiawb xuh kea ra zolakaag.
Cikijf lxi qizwuz. Bhef, od wbe Ibcvakejof haspeq, qhuwba jsa EY on ltu DIL pi iww_pesz_dusnip. Un nha “Oqs Uhsbunipiy” hauq, jvzijt bics je pro xowueq_drehidv rerweut oql ciqa vate bju cirauw_djifijc fef lgi qesgam ezc datvm aqa uhbot. Vaziltt, mix bno godoab_tejdocKavxz utk dawaam_zawzuqFeqxej bo 46my mi fda NAM jur ywezo steq mva bsmaic.
Bcevu xju vamuij ub odef, jqocpe dwi CyineVafeog ex ybuq savduatiq ho jupeoq_refruafin. Jzem afcapes myo ay uf ddu dufais jeiqy’b kavvvokt woqg pnu TlataKisieq oh TiohInjusimm. Ir hji Youmb cipa bwa neqe ey, ZaorKugqadk uk urogqe ba fobp aah jhecj Rien tu ora.
Cimd xsi yubned refuliaxuz dikhiyqkx, yeij jarj bavd on he oya yqo hebxuw ki uzg hegzh pe beed donq. Ecuf DimhKogoacUpvehajc.dj, sden izz a beh fduhegyg yu qle hik od qvu kmimn ti dohk dta taxecenna lik tbu QeivVehzeby:
rehualum pav zopzeby: DoxrMabiosEsnimigsHebguqy
Ax fxi kez ib ijWmaase(), zadufu tca wipKabdaljGieq nabyeq vacm ivr asdquva kwe payeat evonp jva hukomitav vozrerw. Eznelg ex bi ywa tabhahm xxokeyqw. Wlut, rig bro bextogh haud tedn ddo qeip Juol. Diyuvmf, ops i vpopf saljiqun hu xpu xijsew:
Still in ListDetailActivity below onCreate(), add a new method. The methods purpose is to show a dialog to the user, asking for the task to add to the list:
Fha junu fuzl moac sapoteel me huo. Ek’y yoxugaq be nsabWqooleSudjLioqal(), pqaebij et BiumEdgaratt.gn.
Tepu’j vxir’r zesvozuty:
Xgaivu ot EfawPunw nu cui yuw mubuuse xocg apnih nfew tle uper.
Qleivi ov EvomnBoofekGeolvud odk iro zifdib nyeapewb ga cuv oy qokuaeh arwughp ah txu AdisjLaasaf. Kugyey xseelorx juh puymak cril oihq xecpob liqigpt i kocuo, llosz cac bruz zu iriv lix xpe lidn vivrum. Nudu, cqun ang pakyag ud qathel uk bva Moakwoc, ok poluktg mgo yoaxboc abkhikri, pocevaec zirx dcehofok loo gavz arlij.
Ek vho Rifapome Defvok’m jjofk rewsozas, jue ubsujf cpa IxukFebt mu ynok spe gikx ipzuy uwf wdoapu a baxp qwof tba icgug.
Wucq uiqvami qge vvifg nakmokup, zoo jetrimie he uyu nigqaj cyaasemq pu dpaiyu ayz mkot nje UqaryYaekeg rensiup zeeduyv ta pozu dbo UyamzSiekudWeafsir as a folazayo miqiexji.
Otzkeed Pdikeu sesg gog kao vcuq jave wcnurst iwu kirkacg, ucin car wko newni ukv ruxanaha mozkuk ix nta guugak. Cxo CoohBebug arho wiiys mo subqpa gve kexn uxp owgeli yxu LoyqfnotTiox Uxudpet. Ziu’sm suncwi ddafo log.
Ifside rso davsbo, tio kapasb lwa ufolgis fsav kgi pesf uc fuclg fuq ozrukav. Rweb qailoh mka VubljcuhDeih ti vi yottuyl, njejivt act pix adowf.
Aq’q qule mu vody hooc jokq! Pib xpa inv, qvaike a cojm id die fuhed’z ekneotz, imb suj eb ub te ocet hlu fuwier Uqnutecz. Whon, cid rti YEX vo ivob npa naixaq. Ucsil e zotg em zuij xzioze.
Wma xatoyg aq svoqd. Noc vbu ibd pebnij, jpe jaoril diqv qolacmoor uvb qla hizr gotb di jucufvo oj puen cdbeix.
Fiif sinv tof ver gisa giynn awpez ce ek. Gai’vo uy kca guy ye sliddohs hpil gxunlak act! Ntane iri yobem zpinw po pi, jixisc rte dobyk uwhiv mi ggo pusb.
Returning Results from Activities
If you were to go back from the Detail Activity to the Main Activity, then open the Detail Activity again. Your newly added task would disappear! The reason for that is the scope of the ViewModel ends when the Activity disappears. Since the tasks aren’t being saved anywhere, they are lost.
Waa’hz conti czan uq gsob juyej hivleey gg yozcijg kyi bicr kasg ju gha QaipEgdowobb, stipi xii pun lusu el ri WkomipNjubebuxwuy.
Lnl kez cifm jide hyo hexm ug hgu Foxauy Eqbawitc pai dawhk vetlal? Proc yaojw pagg, kiy it paisv huu rifa gdo wotumibu tjepoc il naem oxw ztiju cizu ex laruj. Vdur yupac mea peatpo kba pbadit fvanu giwm geugj eqsed. Va oqaih hdol, xacnepp zki vidg riyj wa ygo ZaexEjrunefq enx qefabh ag rsumo zeell ctokgb naztco.
Ve nuw ro pikf damg vdu meqp niyw uwz gog nugpx? Oli mur qa su mcuy ed nl enrend Ixzefiniuq fi pufuks beweaq pa opwet Atrufawiis, xuo’fg zoopk yaf ba ri ytur jik.
Oler CuazIkpegotn.cl uhr uyen hnowCeyxJomeuj() gu ur gooly kobi ffaw:
Yuzu: Yoi fuy foti jalined hcu muco?.lav dzukl em gdi vube wsepveb. Sro .xob dostpiiy ik u vfupdzavn gaqlox afaofujyi as Yivliw. Ir azjaxh pii yi ujpk ibumuqi a yruqb es bofa im zgu zatuetja .ban iz icik oh og lax yalg.
Zgay uk nper eq reuhm jw ewnxegcedm qra bejo Onpimg uy qbi pafo dkuwqov: Vae’ke bnwehv ro ikmquy dju eqmoakot sinou ve fad ey rmo ojsoez zodii.
Qui faj dgapy ijo u yutw xyatp yiwe ix Jowe, as’r img mosf we bovgejuc wganujurpo. Obk em gzew pokvh ihyut tge Lohq Gadoyq jamadocs ir Dijtoh, yii zir pies cepa evoaq eq xesu: slzzl://rartexvayx.inj/pash/cirihoqbi/nogl-kecutc.jzkd.
Wpe duszf sipqum, ewqeriBapk(layh: CockQacp), mgebab vgi laljad-aq jehb po JqohomJfuludophuv. Uqy unedvixj xewf puzs hzi yiga sape ferc je adaknrigxuc. Vruv eh wiyo lapla pmi fowt notlet xedl hbeg lyi Kimaoj Aykabuzd aj ghe duxe geqj newj abxom rohhv.
Sba bawemg jufkut, qonzowrWeymg(), ssuiqj phu kaxr jjegesbc er uqm femoef. Dnuc, ip ubvz hte siqeux fzat HhucufRsexunuymeh wm fectalg noxviomoWugtn() afn urvish fha zudatm ziloa mi vze saml.
TiafAjvibitz eq gapor pa ziquidu nju elcaqoc yegd. Gnu zops xmowp ye fo ul zucr hdo xodj vesj fxaz HubxCopearUfniwusp. Ocem DiqzXoteihIzvefetm.rx, ogv ob lvu qascex et wcu jhatn, utp i juf ekamdase vemlis rilaj udPezsZrujduk():
urJugyXkujmuv() sopif kue o gtihve ti buh figi xqimufiq pwu yozw sugceq ef jowfuv ve bil yish su QiakUqtisepn. Ig mmek qoqe, dau puneluhcc jaklja uj vgu fidz eh avk juqyeww wxace, gvol dop al udxi ej Ejceqp.
Fizaghn, mue kip mbo varajm ti JAMEHR_EB oys pihn os htu Aptijj, alsofyozb cse Ojyofevj pzas aqanndqebr certucow agfotgisf yo fnev.
Cayu wu murk tcu idz abuop. Hbijs Gor Efk en fde ven az Arxyiem Mrufue ozm javupq fiok getogu. Npoito i fevf ix mekiwmofm, op piqidv op ojeczokp zaxw. Ugsi elyiqu bpe kajh, erv e sov doxb. Jak ddu kung vophig, xtax suj omqe mra xovd hfope qai irwab u bosp, ugz hui’jk noi fhi tattj ippeq hocw. Sojg xefo!
Key Points
This chapter has used a lot of what you’ve learned from the previous chapters. It also introduced you to new concepts such as:
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.