第4回スタートアップAndroid勉強会 https://connpass.com/event/59928/
νʔϜ։ൃͱ"OESPJEΞϓϦͷߏୈճελʔτΞοϓ"OESPJEษڧձελʔτΞοϓʹ͓͚ΔΞʔΩςΫνϟͱͷ͖߹͍ํ
View Slide
ٶԼཽେ$IBU8PSLגࣜձࣾΞϓϦέʔγϣϯ։ൃ෦νʔϜϦʔμʔ[email protected]
ߏ
"OESPJEΞϓϦͷߏΞʔΩςΫνϟύοέʔδߏ
ΞʔΩςΫνϟ.7$.71.77.'MVY7*1&3$MFBO"SDIJUFDUVSFFUD
ϥΠϑαΠΫϧʹண͢ΔΞʔΩςΫνϟ‣ 3Y+BWB&WFOU#VTΛ͍ͬͯΕҙࣝ͢Δͣ PO4UBSUPO4UPQͰTVCTDSJCFVOTVCTDSJCF ߪಡ͕ഁغ͞Εͨͱ͖ͷࢹରͷదͳഁغ‣ ϥΠϑαΠΫϧʹண͢Δͱ͞Βʹҙࣝ͢Δ͜ͱ ׂͷ ը໘ͱใ ใͱϩδοΫ ϩδοΫͱӬଓԽػߏ
"OESPJE"SDIJUFDUVSF$PNQPOFOUT‣ (PPHMF*0Ͱൃද͞Εͨ‣ (PPHMFͷߟ͑ΔਪનΞʔΩςΫνϟ‣ "DUJWJUZ'SBHNFOUͷϥΠϑαΠΫϧʹண ؍ଌՄೳͳϥΠϑαΠΫϧͱඥ͘σʔλ -JGFDZDMF-JWF%BUB ը໘ճసʹӨڹ͞Εͳ͍σʔλͷอ࣋ 7JFX.PEFM σʔλͷӬଓԽΛखॿ͚͢Δ 3PPN1FSTJTUFODF-JCSBSZ
ΞʔΩςΫνϟࣅͯ͘Δ‣ "DUJWJUZ'SBHNFOU$VTUPN7JFX 7JFX6*ͷ੍ޚʹूத͢Δ‣ 7JFX.PEFM 7JFXͷͨΊͷΛอ࣋͢Δ 7JFXͱϏδωεϩδοΫͷڮ͠‣ #VTJOFTT-PHJD ΦϒδΣΫτ ϏδωεϩδοΫ
7JFX7JFX.PEFM#VTJOFTT-PHJD‣ 3Y+BWB‣ JOUFSGBDF‣ &WFOU#VT
"OESPJEͷ7JFX͍͜͠‣ "DUJWJUZ 'SBHNFOU %JBMPH'SBHNFOU #PUUPN4IFFU $VTUPN7JFX‣ ը໘ͷίϯϙʔωϯτಉ࢜௨৴͕ඞཁ 7JFX.PEFMΛͲͷΑ͏ʹ͏͔ %BUB#JOEJOHͱͲ͏Έ߹ΘͤΔ͔
7JFX.PEFMΛͲͷΑ͏ʹ͏͔‣ Ϣʔβʔ͕ݟ͍ͯΔlը໘zʹؔ৺Λ͚Δʷ )PHF"DUJWJUZ⾮)PHF"DUJWJUZ7JFX.PEFM̋ )PHF"DUJWJUZ )PHF'SBHNFOU )PHF$VTUPN7JFX )PHF7JFX.PEFM lը໘zͷؔ৺ʹରͯ͠7JFX.PEFM͕͋Δ ۃྗ"OESPJE߹ʹҾͬுΒΕͨ͘ͳ͍
7JFX.PEFMΛͲͷΑ͏ʹ͏͔‣ "OESPJE"SDIJUFDUVSF$PNQPOFOUT 7JFX.PEFM1SPWJEFSTܦ༝Ͱڞ༗Ͱ͖Δclass MyFragment: Fragment() {val viewModel: MyViewModel by lazy {ViewModelProviders.of(activity).get(MyViewModel::class.java)}}
%BUB#JOEJOHͱͲ͏Έ߹ΘͤΔ͔‣ ֤ϨΠΞτͱ7JFX.PEFMΛόΠϯυ 7JFX.PEFMը໘ͷτοϓίϯϙʔωϯτ͔Βऔಘname="hogeViewModel"type="com.example.view.hoge.HogeViewModel"/>
%BUB#JOEJOHͱͲ͏Έ߹ΘͤΔ͔‣ 0CTFSWBCMF'JFMEͳͲͬͯํόΠϯυandroid:text="@={hogeViewModel.textValue}">data class HogeViewModel(val textValue: ObservableField =ObservableField())
7JFXͱ7JFX.PEFM)PHF"DUJWJUZ)PHF'SBHNFOU)PHF7JFXl)PHFz%BUB#JOEJOHl)PHF7JFX.PEFMz0CTFSWBCMF'JFMESY0CTFSWBCMF$PNNBOE&WFOU
Έ‣ Ϣʔβʔ͕ݟ͍ͯΔlը໘zʹؔ৺Λ͚Δ Ͳ͜·Ͱ͕ಉ͡ίϯςΩετͷը໘ͳͷ͔ )PHF"DUJWJUZ͕ΞΫςΟϒͰ͋Εɺ ͦ͜ʹදࣔ͞ΕΔͷಉ͡ίϯςΩετʁ ྫ͑l%JBMPH'SBHNFOUzͲ͏ͩΖ͏ʁ )PHF7JFX.PEFMΛ͖͔࣋ͭ൱͔ ઐ༻ͷ7JFX.PEFM͕͋ͬͨํ͕ྑ͍ͷ͔ දࣔ͞ΕΔ%JBMPHͷதͰมΘΓͦ͏͚ͩͲ ʅЏʆʀřŖƃʜ
ύοέʔδߏ
ύοέʔδߏ‣ "OESPJEΞϓϦͷύοέʔδߏࣗ༝͕ߴ͍ ϓϩδΣΫτσϑΥϧτͰ.BJO"DUJWJUZ͕ ύοέʔδԼʹυʔϯͱஔ͔Ε͍ͯΔ‣ ྫ͑044ͳ"OESPJEϓϩδΣΫτͰʁ- root- ui- activities- fragments- views- viewmodels- root- ui- Activity.java- Fragment.java- model- utils
Ͳ͜ʹ͢Δ͔‣ ύοέʔδߏΛͲ͏ׂ͢Δ͔ lVJzlNPEFMzʹ͚Δͷྑ͋͘Δ ͔Γ͍͢‣ Ͱ lBDUJWJUZzͳͲͰ͚͍ͯ͘ͷ͕ຊʹྑ͍ͷ͔ lը໘zʹண͢Δͱίʔυ͕ࢄͯ͘͠Δ ͞ΒʹlWJFXNPEFMzग़ͯ͘Δͱʜʜʁ ̻̻̻ƅЧƅűŘŎŎŎ
ఏҊ‣ Ϣʔβʔ͕ண͢Δը໘Λߏ͢ΔཁૉͰ·ͱΊΔ- root- ui- hoge- HogeActivity.kt- HogeFragment.kt- HogeCustomView.kt- HogeViewModel.kt- fuga- ……
ఏҊ‣ ϝϦοτ ύοέʔδϓϥΠϕʔτʹͰ͖Δ ը໘Λߏ͢ΔཁૉͰ·ͱΊΒΕΔͷͰࢄΒΒͳ͍ (JU)VCͷ3FQPTJUPSZ7JFXFSͰݟΔͱָ͖ʑ‣ σϝϦοτ ࢥ͍͔ͭͳ͍ʂ
ʹΌΜͳΜͷͨΊʹ
ͳͥlΞʔΩςΫνϟzʹ͢Δͷ͔‣ ਓͳΒ ଟͲΜͳܗͰͳ͍ ਓ ਓʜʜνʔϜʹͳ͖ͬͯͨΒʁ டং͕ඞཁ ΞʔΩςΫνϟடং νʔϜͷͨΊʹΞʔΩςΫνϟ͕͋Δ‣ டং͕ͳ͍ͱͲ͏ͳΔͷ͔ ։ൃ͕མͪɺόάੜ·ΕɺΧΦεʹͳΔ ϢʔβʔͷՁఏڙ͕ૄ͔ʹͳΔ
ελʔτΞοϓͱΞʔΩςΫνϟ‣ Ϗδωεޭ͢Δ͔͔Βͳ͍ ϐϘοτ͢Δ͜ͱ͋Δ ૉૣ͘։ൃͯ͠ɺՁͷݕূΛߦ͍͍ͨ ͰɺϢʔβʔͷͱͯख़͍ͯ͠Δ ͡Ί͔Βҙਤ͢ΔػೳΛਖ਼͘͠ಈ࡞ͤ͞Δඞཁ͕͋Δ ૉૣ͍։ൃWTਖ਼͘͠ಈ࡞͢ΔϓϩάϥϜ ΞʔΩςΫνϟʹΑͬͯடংΛखʹೖΕΑ͏ டংʹΑͬͯϢʔβʔͷՁఏڙΛखॿ͚͢Δ
டং͋Δ։ൃΛߦ͏ؒΛ୳͍ͯ͠·͢‣ $IBU8PSLͰ"OESPJEJ04ΤϯδχΞΛืूத ΞʔΩςΫνϟͱڞʹ͋Δ։ൃΛ͠·ͤΜ͔ʁ ౦ژΦϑΟεେࡕΦϑΟε ౦ژΦϑΟε݄ʹ౦ژλϫʔͦʹҠస͠·͢ ࠓઙ ͔ͬͺڮಓ۩֗ͷதʹ͋Γ·͢IUUQDPSQDIBUXPSLDPNKBSFDSVJUFOHJOFFS
͓͠·͍