Slide 1

Slide 1 text

νʔϜ։ൃͱ"OESPJEΞϓϦͷߏ੒ ୈճελʔτΞοϓ"OESPJEษڧձ ελʔτΞοϓʹ͓͚ΔΞʔΩςΫνϟͱͷ޲͖߹͍ํ

Slide 2

Slide 2 text

ٶԼཽେ࿠ $IBU8PSLגࣜձࣾ ΞϓϦέʔγϣϯ։ൃ෦νʔϜϦʔμʔ !SZVHPP@

Slide 3

Slide 3 text

ߏ੒

Slide 4

Slide 4 text

"OESPJEΞϓϦͷߏ੒ ΞʔΩςΫνϟ ύοέʔδߏ੒

Slide 5

Slide 5 text

ΞʔΩςΫνϟ .7$ .71 .77. 'MVY 7*1&3 $MFBO"SDIJUFDUVSF FUD

Slide 6

Slide 6 text

ϥΠϑαΠΫϧʹண໨͢ΔΞʔΩςΫνϟ ‣ 3Y+BWB΍&WFOU#VTΛ࢖͍ͬͯΕ͹ҙࣝ͢Δ͸ͣ PO4UBSUPO4UPQͰTVCTDSJCFVOTVCTDSJCF ߪಡ͕ഁغ͞Εͨͱ͖ͷ؂ࢹର৅ͷద੾ͳഁغ ‣ ϥΠϑαΠΫϧʹண໨͢Δͱ͞Βʹҙࣝ͢Δ͜ͱ ໾ׂͷ෼཭ ը໘ͱ৘ใ ৘ใͱϩδοΫ ϩδοΫͱӬଓԽػߏ

Slide 7

Slide 7 text

"OESPJE"SDIJUFDUVSF$PNQPOFOUT ‣ (PPHMF*0Ͱൃද͞Εͨ ‣ (PPHMFͷߟ͑ΔਪનΞʔΩςΫνϟ ‣ "DUJWJUZ'SBHNFOUͷϥΠϑαΠΫϧʹண໨ ؍ଌՄೳͳϥΠϑαΠΫϧͱඥ෇͘σʔλ -JGFDZDMF-JWF%BUB ը໘ճసʹӨڹ͞Εͳ͍σʔλͷอ࣋ 7JFX.PEFM σʔλͷӬଓԽΛखॿ͚͢Δ 3PPN1FSTJTUFODF-JCSBSZ

Slide 8

Slide 8 text

ΞʔΩςΫνϟ͸ࣅͯ͘Δ ‣ "DUJWJUZ'SBHNFOU$VTUPN7JFX 7JFX6*ͷ੍ޚʹूத͢Δ ‣ 7JFX.PEFM 7JFXͷͨΊͷ஋Λอ࣋͢Δ 7JFXͱϏδωεϩδοΫͷڮ౉͠ ‣ #VTJOFTT-PHJD ஋ΦϒδΣΫτ ϏδωεϩδοΫ

Slide 9

Slide 9 text

7JFX 7JFX.PEFM #VTJOFTT-PHJD ‣ 3Y+BWB ‣ JOUFSGBDF ‣ &WFOU#VT

Slide 10

Slide 10 text

7JFX 7JFX.PEFM #VTJOFTT-PHJD ‣ 3Y+BWB ‣ JOUFSGBDF ‣ &WFOU#VT

Slide 11

Slide 11 text

"OESPJEͷ7JFX͸΍΍͍͜͠ ‣ "DUJWJUZ 'SBHNFOU %JBMPH'SBHNFOU #PUUPN4IFFU $VTUPN7JFX ‣ ը໘಺ͷίϯϙʔωϯτಉ࢜΋௨৴͕ඞཁ 7JFX.PEFMΛͲͷΑ͏ʹ࢖͏͔ %BUB#JOEJOHͱͲ͏૊Έ߹ΘͤΔ͔

Slide 12

Slide 12 text

7JFX.PEFMΛͲͷΑ͏ʹ࢖͏͔ ‣ Ϣʔβʔ͕ݟ͍ͯΔlը໘zʹؔ৺Λ޲͚Δ ʷ )PHF"DUJWJUZ⾮)PHF"DUJWJUZ7JFX.PEFM ̋ )PHF"DUJWJUZ )PHF'SBHNFOU )PHF$VTUPN7JFX )PHF7JFX.PEFM lը໘z΁ͷؔ৺ʹରͯ͠7JFX.PEFM͕͋Δ ۃྗ"OESPJE౎߹ʹҾͬுΒΕͨ͘ͳ͍

Slide 13

Slide 13 text

7JFX.PEFMΛͲͷΑ͏ʹ࢖͏͔ ‣ "OESPJE"SDIJUFDUVSF$PNQPOFOUT 7JFX.PEFM1SPWJEFSTܦ༝Ͱڞ༗Ͱ͖Δ class MyFragment: Fragment() { val viewModel: MyViewModel by lazy { ViewModelProviders.of(activity) .get(MyViewModel::class.java) } }

Slide 14

Slide 14 text

%BUB#JOEJOHͱͲ͏૊Έ߹ΘͤΔ͔ ‣ ֤ϨΠΞ΢τͱ7JFX.PEFMΛόΠϯυ 7JFX.PEFM͸ը໘ͷτοϓίϯϙʔωϯτ͔Βऔಘ

Slide 15

Slide 15 text

%BUB#JOEJOHͱͲ͏૊Έ߹ΘͤΔ͔ ‣ 0CTFSWBCMF'JFMEͳͲ࢖ͬͯ૒ํ޲όΠϯυ data class HogeViewModel( val textValue: ObservableField = ObservableField() )

Slide 16

Slide 16 text

7JFXͱ7JFX.PEFM )PHF "DUJWJUZ )PHF 'SBHNFOU )PHF 7JFX l)PHFz %BUB#JOEJOH l)PHF7JFX.PEFMz 0CTFSWBCMF'JFME SY0CTFSWBCMF $PNNBOE &WFOU

Slide 17

Slide 17 text

೰Έ ‣ Ϣʔβʔ͕ݟ͍ͯΔlը໘zʹؔ৺Λ޲͚Δ Ͳ͜·Ͱ͕ಉ͡ίϯςΩετͷը໘ͳͷ͔ )PHF"DUJWJUZ͕ΞΫςΟϒͰ͋Ε͹ɺ
 ͦ͜ʹදࣔ͞ΕΔ΋ͷ͸ಉ͡ίϯςΩετʁ ྫ͑͹l%JBMPH'SBHNFOUz͸Ͳ͏ͩΖ͏ʁ )PHF7JFX.PEFMΛ࣋ͭ΂͖͔൱͔ ઐ༻ͷ7JFX.PEFM͕͋ͬͨํ͕ྑ͍ͷ͔ දࣔ͞ΕΔ%JBMPHͷத਎Ͱ΋มΘΓͦ͏͚ͩͲ΋ ʅЏʆʀ řŖƃʜ

Slide 18

Slide 18 text

ύοέʔδߏ੒

Slide 19

Slide 19 text

ύοέʔδߏ੒ ‣ "OESPJEΞϓϦͷύοέʔδߏ੒͸ࣗ༝౓͕ߴ͍ ϓϩδΣΫτσϑΥϧτͰ͸.BJO"DUJWJUZ͕
 ύοέʔδ௚Լʹυʔϯͱஔ͔Ε͍ͯΔ ‣ ྫ͑͹044ͳ"OESPJEϓϩδΣΫτͰ͸ʁ - root - ui - activities - fragments - views - viewmodels - root - ui - Activity.java - Fragment.java - model - utils

Slide 20

Slide 20 text

Ͳ͜ʹ஫໨͢Δ͔ ‣ ύοέʔδߏ଄ΛͲ͏෼ׂ͢Δ͔ lVJz΍lNPEFMzʹ෼͚Δͷ͸ྑ͋͘Δ ෼͔Γ΍͍͢ ‣ Ͱ΋ lBDUJWJUZzͳͲͰ෼͚͍ͯ͘ͷ͕ຊ౰ʹྑ͍ͷ͔ lը໘zʹண໨͢Δͱίʔυ͕෼ࢄͯ͘͠Δ ͞ΒʹlWJFXNPEFMz΋ग़ͯ͘Δͱʜʜʁ ̻̻̻ƅЧƅ űŘŎŎŎ

Slide 21

Slide 21 text

ఏҊ ‣ Ϣʔβʔ͕ண໨͢Δը໘Λߏ੒͢ΔཁૉͰ·ͱΊΔ - root - ui - hoge - HogeActivity.kt - HogeFragment.kt - HogeCustomView.kt - HogeViewModel.kt - fuga - ……

Slide 22

Slide 22 text

ఏҊ ‣ ϝϦοτ ύοέʔδϓϥΠϕʔτʹͰ͖Δ ը໘Λߏ੒͢ΔཁૉͰ·ͱΊΒΕΔͷͰࢄΒ͹Βͳ͍ (JU)VCͷ3FQPTJUPSZ7JFXFSͰݟΔͱ͖΋ָʑ ‣ σϝϦοτ ࢥ͍͔ͭͳ͍ʂ

Slide 23

Slide 23 text

ʹΌΜͳΜͷͨΊʹ

Slide 24

Slide 24 text

ͳͥlΞʔΩςΫνϟzʹ஫໨͢Δͷ͔ ‣ ਓͳΒ ଟ෼ ͲΜͳܗͰ΋໰୊͸ͳ͍ ਓ ਓʜʜνʔϜʹͳ͖ͬͯͨΒʁ டং͕ඞཁ ΞʔΩςΫνϟ͸டং νʔϜͷͨΊʹΞʔΩςΫνϟ͕͋Δ ‣ டং͕ͳ͍ͱͲ͏ͳΔͷ͔ ։ൃ଎౓͕མͪɺόά΋ੜ·ΕɺΧΦεʹͳΔ Ϣʔβʔ΁ͷՁ஋ఏڙ͕ૄ͔ʹͳΔ

Slide 25

Slide 25 text

ελʔτΞοϓͱΞʔΩςΫνϟ ‣ Ϗδωε͸੒ޭ͢Δ͔෼͔Βͳ͍ ϐϘοτ͢Δ͜ͱ΋͋Δ ૉૣ͘։ൃͯ͠ɺՁ஋ͷݕূΛߦ͍͍ͨ Ͱ΋ɺϢʔβʔͷ໨͸ͱͯ΋੒ख़͍ͯ͠Δ ͸͡Ί͔Βҙਤ͢ΔػೳΛਖ਼͘͠ಈ࡞ͤ͞Δඞཁ͕͋Δ ૉૣ͍։ൃWTਖ਼͘͠ಈ࡞͢ΔϓϩάϥϜ ΞʔΩςΫνϟʹΑͬͯடংΛखʹೖΕΑ͏ டংʹΑͬͯϢʔβʔ΁ͷՁ஋ఏڙΛखॿ͚͢Δ

Slide 26

Slide 26 text

டং͋Δ։ൃΛߦ͏஥ؒΛ୳͍ͯ͠·͢ ‣ $IBU8PSLͰ͸"OESPJEJ04ΤϯδχΞΛืूத ΞʔΩςΫνϟͱڞʹ͋Δ։ൃΛ͠·ͤΜ͔ʁ ౦ژΦϑΟεେࡕΦϑΟε ౦ژΦϑΟε͸݄ʹ౦ژλϫʔͦ͹ʹҠస͠·͢ ࠓ͸ઙ૲ ͔ͬͺڮಓ۩֗ͷத ʹ͋Γ·͢ IUUQDPSQDIBUXPSLDPNKBSFDSVJUFOHJOFFS

Slide 27

Slide 27 text

͓͠·͍