Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kyash Androidで新しい画面を作る時のコードの書き順
Search
konifar
June 19, 2018
Programming
14
2.6k
Kyash Androidで新しい画面を作る時のコードの書き順
Kyash meetup #1
konifar
June 19, 2018
Tweet
Share
More Decks by konifar
See All by konifar
Android開発以外のAndroid開発経験の活かしどころ
konifar
3
2.2k
初めてのiOS関連GitHub ActionsをMarketplaceに公開するまでの実録
konifar
3
290
オーナーシップを持つ領域を明確にする
konifar
15
4.5k
雑に思考を整理する技術と効能
konifar
74
36k
何のための個人目標設定?
konifar
28
14k
30点で打席に立つ
konifar
79
51k
Linterでチョット安心 iOS多言語化対応 / ios-i18n-linter
konifar
2
1.2k
VPoEとして1年 もっとこうすればよかった3選 / VPoE Retrospective
konifar
13
6.3k
Introduction to API Testing Automation by Postman
konifar
1
3.7k
Other Decks in Programming
See All in Programming
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
nekko cloudにおけるProxmox VE利用事例
irumaru
3
440
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
5
720
Zoneless Testing
rainerhahnekamp
0
120
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
290
情報漏洩させないための設計
kubotak
3
310
CSC305 Lecture 26
javiergs
PRO
0
140
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
260
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
280
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
190
良いユニットテストを書こう
mototakatsu
8
2.7k
103 Early Hints
sugi_0000
1
230
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Optimising Largest Contentful Paint
csswizardry
33
3k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
Making Projects Easy
brettharned
116
5.9k
Done Done
chrislema
181
16k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Facilitating Awesome Meetings
lara
50
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Transcript
Kyash AndroidͰ ৽͍͠ը໘Λ࡞Δ࣌ͷ ίʔυͷॻ͖ॱ Kyash meetup #1 @konifar
ઃܭࣗମͷ͍͍Ͱ͕͢ ͱ͋ΔઃܭͷதͰ ଞͷਓ͕Ͳ͏ॻ͍͍ͯΔͷ͔ ؾʹͳΓ·ͤΜ͔ʁ
ࠓ͢͜ͱ • Kyash AndroidΞϓϦͰ৽͍͠ը໘Λ։ൃ͢Δ ࣌ʹɺ͕ࣗͲ͏͍͏ॱ൪ͰԿΛߟ͑ͳ͕Β ίʔυΛॻ͍͍ͯΔͷ͔ɻ ※ ݱঢ়͜͏ͬͯΔΑɺͱ͍͏Ͱվળ͋Γ·͢ɻKyashͰৗʹมԽΛ ָ͠Έͳ͕Β։ൃ͍ͯ͠·͢ɻ
ࠓ͞ͳ͍͜ͱ • MVVMͷৄࡉͳઆ໌ • DataBindingͷجຊతͳ༰ • DIɾDaggerͷઆ໌ • Ϣχοτςετͷॻ͖ํ •
JetpackͳͲΛͬͨࠓޙͷల
ϦΞϧΧʔυΛ༗ޮԽ͢Δ࣌ ͷը໘Λྫʹઆ໌͠·͢ɻ ※ Ұ෦ίʔυΛมߋ͍ͯ͠·͢
None
1. ด͡ΔϘλϯ 2. εΫϩʔϧͨ͠ΒӨ͕ͭ ͘Toolbar 3. ΧʔυൃߦࡁΈ͔Ͳ͏͔ APIͰऔಘͯ͠ɺൃߦࡁΈ ͩͬͨΒදࣔΛม͑ΔϨ ΠΞτ
4. λοϓͨ͠ΒભҠ͢ΔϘ λϯͱϦϯΫ
7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF
7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF Activity.kt Fragment.kt activity.xml fragment.xml databinding
ViewModel.kt CheckKyashCardExistsUseCase.kt KyashCardRepository.kt KyashApi.kt (Retrofit service)
7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF Activity.kt Fragment.kt activity.xml fragment.xml databinding
ViewModel.kt CheckKyashCardExistsUseCase.kt KyashCardRepository.kt KyashApi.kt (Retrofit service) σʔλऔ͖ͬͯͯ ϨΠΞτʹදࣔ
σʔλऔಘͱϨΠΞτදࣔ • ͲͪΒΛઌʹ࣮͢Δ͔ɺAPIͱσβΠϯͷ ͲͪΒ͕ઌʹͰ͖͍ͯΔ͔ʹΑΔɻ • API͕ઌʹͰ͖͍ͯΕσʔλऔಘ෦ɺσβ Πϯ͕ઌʹ͋ΕϨΠΞτ͔Β࡞Δɻ • ͲͪΒͰ͖͍ͯͳ͔ͬͨ߹ϨΠΞτ͔ Βࡶʹ࡞͓ͬͯ͘ʢKyashͰ͋·Γͳ͍ʣ
σʔλऔಘ෦ͷ࣮ॱ • Ϋϥεґଘͷͳ͍ͱ͜Ζ͔Β࡞ΔɻAPIͷΫϥ εϝιου͕ͳ͍ͱRepositoryΛ࣮Ͱ͖ ͳ͍ʢTDDͰΔ߹ผͰ͕͢ʣ • API => Repository =>
UseCase ͷॱ൪ɻ
KyashApi.kt • RetrofitͷΠϯλʔϑΣʔεʹϦΫΤετ༻ͷϝιουΛՃɻ • ϨεϙϯεύϥϝʔλͰ৽͍͠Entity͕ඞཁͳΒ͜ͷλΠϛ ϯάͰ࡞͓ͬͯ͘ɻ
KyashCardRepository.kt • nonceΛऔಘͯ͠ɺͦΕΛͬͯผͷAPIΛୟ͘ɻ RxͷflatMapΛͬͯAPIͷྻԽɻ
CheckKyashCardExistsUseCase.kt • UseCaseɺRepositoryͷϝιουͷ݁ՌΛϏδωεϩδοΫʹԊͬͨܗ ʢࠓճͩͱBooleanʣʹՃ͢Δɻ RxͩͱՃ͍͢͠ͷͰฦΓSingleCompletableʹ͍ͯ͠Δɻ
ʊਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰॳϏϧυɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ
ॳΊͯͷϏϧυ • Ϗϧυ͕͍ͷͰɺσʔλऔಘ෦Ψοͱ Ұؾʹॻ͍ͯ͠·͏͜ͱ͕ଟ͍ɻ • ͜ͷྫͩͱUseCaseʹϩδοΫ͕ೖ͍ͬͯΔ ͷͰϢχοτςετ͜ͷλΠϛϯάͰॻ͘ɻ
ϨΠΞτදࣔ෦ͷ࣮ॱ • Ϋϥεґଘͷͳ͍ͱ͜Ζ͔Β࡞Δɻ • ViewModel => xml => Fragment =>
Activity
ViewModelͷଊ͑ํ • ViewͷදࣔཁૉΛϓϩύςΟʹ࣋ͭɻ • View͔ΒͷΞΫγϣϯʢϥΠϑαΠΫϧ λοϓͳͲʣΛϝιουͰ࣮͢Δɻ • ͲΜͳϓϩύςΟͱΞΫγϣϯ͕ඞཁ͔Λ಄ ͷதͰཧ͓ͯ͘͠ɻ
1. ΧʔυൃߦࡁΈ͔Ͳ͏͔νΣοΫ தͷϩʔυதදࣔͷVisibility 2. ൃߦࡁΈͩͬͨ࣌ͷViewͷ Visibility 3. ະൃߦͩͬͨ࣌ͷViewͷVisibility දࣔཁૉͱͳΔϓϩύςΟ
ViewModel.kt - ϓϩύςΟ • ίϯετϥΫλʹɺΧʔυൃߦࡁΈ͔Ͳ͏͔ΛνΣοΫ͢ΔUseCaseͱը໘ ભҠͷͨΊͷNavigatorΫϥεΛDaggerͰInjectɻ • ViewͷදࣔʹඞཁͳVisibilityͷIntͷϓϩύςΟΛॻ͘ɻ͜ͷྫͰVisibilityͩ ͚͕ͩɺදࣔ͢ΔςΩετͷStringͳͲViewModelʹॻ͍͍ͯΔɻ
1. onResumeͰΧʔυൃߦ͍ͯ͠ Δ͔Ͳ͏͔ͷνΣοΫ 2. λοϓͨ͠Βը໘ભҠ ΞΫγϣϯ
ViewModel.kt - onResume() • ϩʔυͨ݁͠ՌʹΑͬͯϓϩύςΟΛมߋ͢Δɻ͜ͷϓϩύςΟΛ͋ͱͰdatabindingͰxmlʹόΠϯυ͢Δͧʔͱ͍͏ؾ࣋ͪͰॻ͘ɻ • ͪͳΈʹ subscribeOnͱobserveOnΛ͜͜Ͱ྆ํΔͷ͋·ΓΑ͘ͳ͍ͱࢥ͍ͬͯΔɻ
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰςετΛॻ͘ɹʻ ʉ^Y^Y^Y^Y^Y^Y^Y^ʉ
σʔλऔಘͱදࣔͷςετ • UseCaseΛϞοΫͯ͠ɺϝιου͕ݺΕͯ ͍Δ͔ΛVerify͢Δɻ • ϝιουͷฦΓͷ݁ՌʢSingleͷsuccess errorʣʹΑͬͯɺϓϩύςΟͷ͕దʹม ߋ͞Ε͍ͯΔ͔Λςετ͢Δɻ
ViewModel.kt - ด͡ΔϘλϯ • DataBindingͷonClickͰόΠϯυ͢ΔͨΊʹɺҾʹViewΛ͢ɻ • NavigatorݱࡏͷActivityͷࢀরΛ͍࣋ͬͯͯɺfinishActivity() ΛݺͿͱ Activity͕ด͡ΔʢNavigatorΛͻͱͭ࡞ΔΓํ͕͍͍͔ʹ͍ͭͯݕ౼ ͷ༨͋ΓͰ͢ʣ
• ͢Ͱʹը໘ભҠઌ͕͋Δ߹ʹnavigatorͷϝιουΛݺͿΑ͏ʹ͢Δɻ • ·ͩͰ͖͍ͯͳ͍߹TODOίϝϯτ͚ͩॻ͍͓ͯ͘ɻ ViewModel.kt - ϘλϯͱϦϯΫ
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰςετΛॻ͘ɹʻ ʉ^Y^Y^Y^Y^Y^Y^Y^ʉ
ը໘ભҠͷςετ • NavigatorΛϞοΫͯ͠ɺదͳϝιουͱҾ ͕ݺΕ͍ͯΔ͔ΛVerify͢Δ͜ͱͰը໘ભ ҠͷςετΛॻ͘ɻ
fragment.xml • dataʹViewModelΛએݴɻ • ͜͜ͰඞཁʹͳΔͷͰɺViewModelͷํΛઌʹॻ͘Α͏ʹ͍ͯ͠Δɻ
fragment.xml - Toolbar • Toolbar styleΛηοτ͢Δ͚ͩͰӨͷ༗ແɺΔϘλϯͷΞΠίϯͳͲΛม ͑ΒΕΔΑ͏ʹ͍ͯ͠Δɻ • navigationOnClickListenerʹViewModelͷΫϦοΫΠϕϯτΛηοτɻ •
shadowAnimationScrollViewId͓खͷBindingAdapterͰɺScrollViewͷid Ληοτ͢ΔͱεΫϩʔϧ͢ΔͱӨ͕ͭ͘ಈ͖Λ͚ͭΒΕΔɻ
ToolbarExt.kt • ҾͰ͞ΕͨϨΠΞτIDΛͱʹScrollViewΛ୳ͯ͠ɺεΫϩʔϧͨ͠ΒToolbar ͷelevationΛม͑ΔΑ͏ʹ͍ͯ͠Δɻ͜ΕʹݶΒͣɺlottieͷΞχϝʔγϣϯͳͲ ViewͷׂͰڞ௨ԽͰ͖ͦ͏ͳͷ݁ߏDataBindingͰΔΑ͏ʹ͍ͯ͠Δɻ
fragment.xml - දࣔΓସ͑
ʊਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰϏϧυᶄɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ
̎ճͷϏϧυ • DataBindingͨ·ʹͲ͕͜ѱ͍ͷ͔શ͘Θ͔ Βͳ͍ΤϥʔΛग़͖ͯͯͭ͠Β͍ɻ • xmlʹόΠϯυͨ͋͠ͱͰҰϏϧυ͕௨ΔΑ ͏ʹ͓ͯ͘͠ͱ҆৺͢Δɻ
Fragment.kt
Activity.kt
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜Ͱ֬ೝͷϏϧυɹʻ ʉY^Y^Y^Y^Y^Y^Y^Yʉ
σόοάϝχϡʔ • ҙͷը໘Λϝχϡʔ͔Β ։͚ΔΑ͏ʹ͍ͯ͠Δɻ • ͱΓ͋͑ͣ࡞ͬͨը໘Λ ͙͢ʹ։͍ͯ֬ೝ͍ͨ࣌͠ʹ ศརɻ
Զͷίʔυͷॻ͖ॱ·ͱΊ
σʔλऔಘɺϨΠΞτදࣔ ͷͲͪΒ͔Βઌʹ࣮͢Δ͔ APIͱσβΠϯͲͪΒ͕ ઌߦ͍ͯ͠Δ͔࣍ୈ
Ϗϧυ͕͍ͷͰ σʔλऔಘ෦Ұؾʹॻ͘
දࣔ෦ViewModelͷ ϓϩύςΟͱΞΫγϣϯ ʹཧͯ͠ॻ͘
DataBindingͰ ͭͳ͛ͯϏϧυͯ͠Έͯ Τϥʔ͕ग़ͳ͍͜ͱΛفΔ
ίʔυͷॻ͖ํ ਓͦΕͧΕ
ઃܭ͞ΕͨΞϓϦͷίʔυΛ ࣮ࡍʹͲ͏ॻ͍͍ͯΔͷ͔ ͱ͍͏հͰͨ͠
͋Γ͕ͱ͏͍͟͝·ͨ͠