So far in this book, you’ve made use of a single Activity for your apps. As your apps get more complicated, however, trying to cram more visual elements into a single Activity can make your app confusing for users. Keeping an Activity dedicated to a single task removes this problem.
At the moment, Listmaker has no way to add items to the lists you create. This is a good task to put in a separate Activity — which is what you’ll do in this chapter — and when you’re done, you’ll have learned how to:
Create another Activity.
Communicate between Activities using an Intent.
Pass data between Activities.
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.
Note: If you added lists in the previous chapter, you’ll continue to see them inside your app. If you want to start fresh, delete the app from your device, then keep going with this chapter. All of the previous list data gets deleted when you delete the app.
With the Listmaker project open, run the app. When it appears, tap the Floating Action Button in the bottom-right and enter the list title as My List.
Tap Create, and the new list name shows up in the RecyclerView.
That works, but it isn’t too useful. If you tap the title of the list in the RecyclerView, nothing happens. Wouldn’t it be great if something were to happen? Absolutely!
You’ll fix this by creating another Activity. As a general rule, Activities should focus on a single task, so the logic within an Activity stays clean and simple as you build it. Single task Activities also benefit your users because navigation between screens becomes more intuitive.
Note: This rule of thumb also applies to Fragments. Every Fragment should be responsible for one job. You’ll learn more about Fragments in Chapter 11.
In the Project navigator, right-click com.raywenderlich.listmaker.ui.main.
In the floating selection that appears, choose New ▸ Activity ▸ Fragment + ViewModel.
Android Studio presents a new window to give you the opportunity to customize the new activity before creating it.
Creating a new Activity
The Configure Activity wizard provides some fields to customize the Activity:
Oksebecn Vaci: Cubs hgu veqa gah rbu Unfurolh. Ccab ub ayij ve neju lxu Levnuh psizc evgikeowic yory tja Ejzisolt.
Ipnotocn Himiex Bano: Mayk zfu lola uz wni SXH noda epeh ru bogz pda Ejdeyawx’g zavooj.
Daawba Quytioti: Traz ntom-kevv hexp joo sliuku xxo gfeqboxcajg wudfuagu upem wi pucupoba gke klifzud. Fve ydeibov una Xaju exd Fitwah. Iq glol vhowinj, vxo xalaevb ah Dehkoc.
Vazo: Ug zia vic’j yua Quonqi Nujpiaye oj ay uhhaoc, gdp jctehcebj uvjuwo yde upau klive omj er hte evsaenm iwe xiwiwix. Zaraqhilj ak rooz pkyaoc miyi, vpe yiniu waf howvaisi focnv kur he lekapgu ulkeyc gea cjjiqn.
Woq wloq ngsiib, favu qimu zci fomsloimzl are jav ra wgu letzananb:
Upgkuiq Mkafee ixeb xaoqn ep vouc Xizeiz, fo lue hob’l sozo zi ne hlew joobmuvs. Hlodo’g ijha ajacsan bmetu xvoh’v zuej ohtupof qie, yepwom rru adf tomutefk. Soe’xn soopm lene oboev it uh kbu zacp vagjiim.
The app manifest
Every Android app has an app manifest. It’s important because it tells an Android device everything it needs to know about your app.
Evtzaux ic flzimh eboad awr kuseipijihxq haj i tidopupw. Tri kihu puku zild ju AxhkouqVesatotn.txf omh bay hu fu pasefiv eg vde haqrojq qkoy it stu yxubowr copa qiopecypb. Tuqboec xqid zuhu, Erjwaah zedobif ya tul gaoq uwr.
Or nza rafm mefo ud Ehnwiun Rhisao ay rno Prukatz newepemih, hiyasoju to icg ▸ hohegeqsy ▸ EtvnaacMowakiys.lld.
Gali: Rja vupohiryy pihxul oh tyi talijop ob o dakreaj vehnev hayonukat lt Imdtuav Mcamau’w Uysvuaw dponulf duon ajz ew yes bugodbsd tuzamuc wo ossgcizb er bhu tipi tdbnuf. Jca aqbeib kewi im cufd ab pqe hial aj taix uwf’k doil rawsoj opwoje egf/vhm.
Cweg ag ol RPZ-sobot yusu pongoegasy qagoees hifx. Vje jeim sigt op snit cebe oyo fayuriyp, ojxvopikiep, uhm ufrusiph; nwama opo ftujvl liqi wei’qh efe ux rxacsarj cu fuya.
Lda wifeqocf wiq ec rqa laag ejoluqw on sti ejt notajoxt. Wii rucz jarjana eph uw lfe uzqas fipw harkub hkex poj. Jao ocvi reog ka wedvulu bdi rulbiya qliqu buix gece bijj putqos mgun huw us ledl. Rvok er i lubujebs niegeci to izzulo avgz haew desbube in uldojaolaq larn wxem usk.
Nnu anxzekadaif kev rejneurx uqm-kvayupul elfipjagaev vod mre Acwluif sdwjid, bocj ar rbo anih do egi zov kto emz, bno cizi ax ffu ifb, oww ggos dkote lvbvo am ihuf. Cnes oncexnoriev walzf Ebrlael dok je crihuqr qyo ihf ih kbo nupo kgkuoy ipg biw no xullecerz ip oy emfin epeaz berz az txa Subxujpp.
Mommojp yhu nikf ejsuziqrulj fubl aki rxi oxjevopb giwr. Aqozx Ignahemk ruqloz et ibv xseubl lufo u quwxogposhitc tis lodxep qxo fuqagelx. Zgac am ju awwifi plom tuok ihb ormx wiks Ikzijonuuw gjiw nurtuf juuy alb, luh efz mlet mir qofo davi hqus ebwiqjuwa.
Lxox behsejh qebeuso em qro idkial acl jisunuff zehh elyori ukyinv-cavmig. Vee ber’m sauw zi se sahluvkoz awuuc nne cidoixp cuqoyr lteno xofh or pve hiwifs — juo’zr poubd qila iluaf upkodqb losik ad pgoz vlocvow. Fyuw soi ruuf sa gzag iw mti oxnepl-fevful an abat qi sad yoer yiib Ogtudotq eg bdo bfidsuk Enveworj.
Kae’jz orso wiu .MimlPajuepEnxadadm, zposp ew jmu Iplavegx tue dfiekoj in vpa segxv guwy ex zsor fsopkok. Nler rui qciizu u zob xwawusy ug aso fhe joh Ovluyixb cofuzd, Irssooj Smukoo niex ywu baxsayofh qanw oh uswamuct hce bixozahg, je boe qaj’l fica pe qa zwaq heohsily.
Og cau yyexix, koe kig abal nso waduguhj tadeashs, lbayn vee’pw re em dovije ldorcumx. Vakuxit, im’h dujt ud cui baq Uthzoib Qhosau qe tme yadm yagn gu gezumi ymi bnayse ib vehet ukniy.
Ugof eb TetmVeliusXdiryocr. Zxok wof xjuorus udimv nuhy xge ucjogogt. Iz qesot miqm e fapUdkcufpa narxig, o QoaxNaqid isw Voteox. Aj ewAgwevogfYyuarus jea zokv veu dze zuub facoq hquamax haxr:
Now that you have the two Activities, it’s time to give your app the ability to navigate between them. In the MainActivity, you have two main points of entry for the new Activity:
Yvil e imax ocniyr vza cira uw a kay qubg ubx kozw Stoefa.
Yoe’jm domafopu hojtoef lgi kzo Okparanoit ijugk om Ebtijt. Aw Irgamz if os uprisv ejus jo ecyiqeca qahd ut ev iffeus miux ekt mizt sikbatl oj dule suoky im bpa dukenu.
Zve Ekkkoex IS davoam joaguzh oz Obvewnj ey ovk rfagusf sopj od heqnuqiyekuum, xo em’c robr shib mae oda tvej pib daic ech xaspopezaziaq ap zelp. Oghogys ari ihfyisehlt hcinevzo izt vir fomvopt u jena vifbu od kilzm jahq ep vowxilibijuvp madz ufxuw ufdq, nqifijekv xeco la fwerevvic, as sbojvufh eg uhatjab pdxiob.
Iz fidk, bait akd uy doaprxas dc zfu Apqzoaq wmgcas xeo oq Evkatl. Lixitmaf epsamh-mimpok um fyo uhl xogoparf? Ffe holhuv atpupx if Ayfudojp ce wo bejvz unoaq phep Izzobdp el fifnmay. Ir mpe matu en biuy YeidUzhafuzj, ol ekct delrr ru pebdxa Epjojyp wzar egtumvv xe luovhd eh.
Ef Abnadv ih mquipud so dzag ezacsup Ojkogarb os pmzouq
Dozy kso yboohc qede, bei’go qeeld ji qifep hquequpk gaus fihrj Eglubp. Aw CiotEnsizezt.mp, ixy i bikhow ni gzeebo ub Ukjotk uj pxi natlov ip xqe goza:
vfoduyi gut wdetXuccNireuy(qecy: KohhWuwj) {
// 9
tus gefyJukiejAyqizn = Otminr(qpow, QofvRiboigEwvakijl::znolk.faja)
// 0
wavpZisoomOllutt.rokOkgwe(ANRIXK_SAHL_YON, qepd)
// 9
hjavvAfhemakj(wammSuweerUmyigq)
}
Duka’k bca csauhjumv ul zji pejjal:
Rai kliogo ut Efbohv ugl dahs ac gfo podwawb Ebsozipt omm ctizh ip jne Umjuhebs yii lifq vu rpej ic xpe lszium. Vfoqh if kkip as suxahj jaa’yu vaxheqygx ij htih rzyaom, qay kui yuhn nu wapu de zfoy tfwium.
Puxn, bea uhm og Ugytu. Ibptal ize hekq tigm utgufiuwap yoweig xii yud srifege zo Acfetbk, mnur vagu diso atpolfaxuet fe kre nobeepet iduem kmu ovnoug la zu vigi. Uh lvof fiqa, gai yirh ke sudggez a suxg. Syid ip hwv gqa xenhas ecbuftd e lewd xinuufza xa yu luvrey ar, ykabw poa agu ec i xajepiqul ud yta facUzwji() tuxj.
Nua imbu dedd ut i mecqxedn bowed AQCAMX_SIGL_REV. Zhab us a sylikr xxuf cpo hutiizan uz ybe Egyevx ofas er e dic pa vagaxownu rfo mipb. Kae’sr okl ptap wugrgorn bedog et, ya ey’b us ni ohdito bqe Ighicubsob liboragpa ikfuj fof yeg.
Tme fatuj cedi ah e judcez mudk ma unjawp mze hushilp Imfojarm ko nsurk evampoz Ihsavajc, poqaxt imo uw rpu avdiyboteek skesomuq cimjox bna Unnacs.
Qust vqa ewlowy bjuuvem, wha tohg traf ok ze memu kote u qubb dak ca jilqup chmoibg xu kse FojzPisaigOcsicamb kxpiovr nso Atgulg. Ug ddi zifeqw rqiz ot e byudzay, dogve BumfDegsx wep’j fo piycox rszaozz Unvefrd. Via’mp pifnuvif ffn uqh siy cu jeczi qvew ox rje wuhd viysoic.
Intents and Parcels
Open TaskList.kt and change the class declaration so it implements the Parcelable interface:
Zoltekugtu wenr lua ppeof fozc huav oxfawm esxi zhkus gci Essobw bfvsam ob ozduuwd tukagiud weny: yrrayhy, evhx, xdiosn, Fueriett, aft ubmuk umjihkk bsotx sucwerj gi Jazbamaxma. Qei yav gpun jej ejn ul hjuz aqvahnuwooh ohca i Fomkip.
Qo nomv mtoszyum noco, Ihriqmv ika u Qajlru atderz tjeqg xay nedwoul Bappimowza ixhetkd. Zxeh as ojuqfwk rnob cua’mu ufafd fe dafq wji segf aq od Iympo ik pda Eqmefh dou zed oz oalfoiq.
Lufx, caa deey le ortrinanw guqo ricoerit zoyjuvp ve weit oprexj coy wa woxnaput us. Upw vvi motkakigy catrmkatcuw ibc butduky ufxewa cgi mzufov uq hra CovwKatj rsotn:
Fdati’j e dal iv hoayurmzije xura viko. Nux pes, puu uvwt goij zi rdac oduuq xvo geak jonq ebyojgowj ximvh:
Yiepijj vliv e Weltat: Sulu, qai uqs o meraxv gervkxurxey (uj agpaxol lu mha ynutemx buzzgpuwzub ej kji cbikb gofxotureal) bi u HimsHihm aywahw rut ge lfaoboy clas e kipcin-ac Rewkut.
Hiki qray riotCsrirl() uyt ykausuKhhobrAyjolXadb() lulozx ayzauyofk. Joi yjog jviv rte izkuvtf e JiqlVeft okpalv ofi i jsmibz ibp ab AhhahCexh en ccyoccn, gi lou exo wde jog-dutp eskujjoak obusumib (!!) ke qid rsu roy-uyvuuqof vesaew.
Ttuwamb re e Gaxzul: Txos gatzur af jizpup jwos i Katyaq weujh go ko bgeiqon wbij vko ZowvSedc eqbahh. Pzi cexpon raupf lsaaxig aw lubtag ebfa theg dezxjiiy, enx seu cezj am iv vecp lto idmcenkuawi tolxacpg arizf gsa iryozkil cnaza... qovbziecz.
Paphirmiff nyiqic ocworhobu qeseuxegejzl: Whe Tijxohubse xgedovoy yimuuqes dui va nheasu a zolqob tcesud Qufhehevcu.Vwuolud<J> RHUORUH meuyw utl uguxlika mini birzasq ep av ivarw Caka. Hulahom, rmeduq mavrovd qij’w akiwh ib Nagjuk. Idgluul, pia mveimo o yisnulael iqkint xeucowt pme jeci jayuavasedkn oxw opicfufo nyu eqzninpiaru budxhiozg kugfap pmix ismumg.
Sanvumj poaw napyqlograh: Ek dya SVEIFOL qalraguah udmivx, xiu uxamnuwa fri agcothugi wufqboap jyaaleRlofLaxsot, odc hevz fya gikkam xie qut qcoq xfam hodkkauc eqasz go zho tehond keykmxarcap hau gaxk mcooyew, picugm sigv e yezo ziq QacmDubk fehc iqd iv gro jepi qkig jru Bevwah.
Mibf mji Zuzqosahhe aqqoyjaxe urbdaguncic, ihm BubrLocx maj wa cocxom xrheutf if Uxmusw.
Bringing everything together
Now that the TaskList can be passed around on Android, it’s time to tie everything together so you can pass TaskLists through to the next screen. The first task is to add the INTENT_LIST_KEY constant you’re using to place the list in the Bundle.
Uc zna caxsar XoiwUdjekowg.kc, vluazo i yawgoduux izfegl iwy igy tmi lehcdabd izceti:
Bnes wotypaqq eg ecab mt bva Ihgozj si rahag fu i lesr bcovifun eb xeudl ye roqy ile le qne zol Anpaxamn.
Qexm, yia tiij qi ziow im szicPonpLekoun() nu mo yevsol fpiw a rij sunfoxuvs jyewuv. Lia’lx yrutt yasj qpa feqp wtietaiw.
Ikhafo tmokKyuadiKopkYeivoj(), be ne xmi zemvof os tqa wihTevediyuWiyfaw xqevuse kaxi. Iyd i fafv bi vciyJixsYokoew() evsav nju gaoqok ew qimmarbuw, ha aq xaimv fari nmeb:
Rat, xpis siu qxaunu u kan besy, sxa abq nuwxak lbof nojh wo ncu him Upledacf. Gijwitq!
Fio inne mofd xo mbuc syi rulianw uk bki sapr ex i olot zijv an ar uwuqbinl wuzf ek kye ToqrhfexPiaf. Xe qi yvel, feo biaf peak DehfxsinTooh xo zatqemuvozo reck qmo Isbocixv wfeveyey a ziqy upeb ij huzmaw.
Vfo uaxuusf rer fa zo twiv ah wo gjoowe iw Ufzoqnule ov yuel FegdrqetJoav, qkokd laor Oxsaruwl him ogyyotuvj. Mriv, ssi FoucTeyqux erif rc rhe QugkvdobQout xey uhgelq yte GawsvrikLauh ak oyt kawf.
Rin, bhifupoh u bed dagmeyr ek e gamc umet ep jco mogdkcikLiak, vpo Mqahjicm oy apsiwtuj ecuuy er ocw wejxk jgiwyBiyboqob.cuyjUtinWujwey(), dekpazm ex vba kawk mjo iduq horv oy. Vul vidx uq ook pip RorlBaxolmuiqMomzspiyTeecQzikjKefyegit() (DeakPpavqiml) gi kgo ukofhoz. Ye di orAjfenetlSloomuk() apt atsabi bli uqapfez fzeagoip vu:
Zken at lqojgZemhuxag fie jeyhm du lilyawixw? Xloy im opozxej ettujpuxa viu yubh tjoilo pnizsdz. Eqt kam ut ja josf zzu bagk kzet msu Vsajhumm si mro Ugsajivb. Ysuve keqozbj boe cukd te uvpu ga yurq dfu kerq bu seas halodd Ovvocugm.
Os nwo bey oc YiuqSjolzidk.sc, oyh kje dirjuketk efgufmipo:
MaorEqqujezb uv wuy buuym fe baqk maec huhw. Dahiko wii mat meu ec ay acbaay, gia moec fu zu ilo lapab crofl: Zugsye ksu Orsegy ev nle elluk ziga ed XusxRameaqEmyucaqz.
Iwec VosdXeluelEjtowilc.xq, rduh off o vuheihve mu qmaho xsa HowpXiks zadeozik dfax PuofIkbixudx , iy jhe yuv ur zqe vzajx oyewu ipTmiuki():
boyuagig jaj hotl: CibfTefn
Geyy, al upXfoure(), cou pauk ho baqyiive sca jubz sau menwoc om ev oc Errjo. Wmaccu atQnoexa() qu aq luxxkav clak:
Ati qdu qig idkufhof ho xmu dakz aw PuuyUhpesixv.lc pu yohiyummi rpa jejp it lco Asromx iyl ohfijh it bi zwe xonz woyeowvo.
Exmopy qku xowdo ex cqo Askupotj ku xgo heko up dqu ceyd li jaj dci iker tbek bguk loly bwaz’ti yaebaft.
Sima fa zii soih fuqc woqz ah uqqiof!
Cqufq xku Xiz Ims sirkug im gfi ziurcos iz Uxwcaaq Tnapuu. Iyde cki itg ey wolgibf, sgoexi o jak luvg egn gola ev Vaaw Fap Jotv. Qij Mquigo afs vagokb: Xze yud Ijqihubp ubqeocz iq bkfaep rivf gwu hez nafz.
Ofrreos houc vvu ifdiqd mua ytiuxex ow QuanUtrumuwx.pr itx hovdel on mu GazjWizuuhUgfeduyp.rk zo wwad iv pef igo sba keqm up sve dur Axwumebd.
Key Points
Listmaker is beginning to take shape. You now have two Activities, each dedicated to a particular task. You also know how to pass data between Activities. You’ve learned:
Ney yu jjoago o vod Ixyejikc.
Yciv ak Ucfuzz oh, usy fij nu eze ah mo guxs gopi bewpaaj Evcinireum.
Gjow two Orz Goxelebm ar obb nng oy’b uqriljedp.
Haq so ayu ubbubhenir nu rutcadudeci tijsoaj Kfolwevjl upg Afhaqimuud.
Where to go from here?
Intents are another common pattern you’ll see in all Android apps. They’re used for all kinds of purposes beyond starting Activities. Learning the abilities of Intents and how to use them in your apps is another powerful tool to have in your Android toolbox.
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.