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

͓͠·͍