Kyash Androidで新しい画面を作る時のコードの書き順

Kyash Androidで新しい画面を作る時のコードの書き順

Kyash meetup #1

35e08efcf39d692f540047fb756eb4e3?s=128

konifar

June 19, 2018
Tweet

Transcript

  1. Kyash AndroidͰ ৽͍͠ը໘Λ࡞Δ࣌ͷ ίʔυͷॻ͖ॱ Kyash meetup #1 @konifar

  2. ઃܭࣗମͷ࿩΋͍͍Ͱ͕͢ ͱ͋ΔઃܭͷதͰ ଞͷਓ͕Ͳ͏ॻ͍͍ͯΔͷ͔ ؾʹͳΓ·ͤΜ͔ʁ

  3. ࠓ೔࿩͢͜ͱ • Kyash AndroidΞϓϦͰ৽͍͠ը໘Λ։ൃ͢Δ ࣌ʹɺࣗ෼͕Ͳ͏͍͏ॱ൪ͰԿΛߟ͑ͳ͕Β ίʔυΛॻ͍͍ͯΔͷ͔ɻ
 
 ※ ݱঢ়͜͏΍ͬͯΔΑɺͱ͍͏࿩Ͱվળ఺΋͋Γ·͢ɻKyashͰ͸ৗʹมԽΛ ָ͠Έͳ͕Β։ൃ͍ͯ͠·͢ɻ

  4. ࠓ೔࿩͞ͳ͍͜ͱ • MVVMͷৄࡉͳઆ໌ • DataBindingͷجຊతͳ಺༰ • DIɾDaggerͷઆ໌ • Ϣχοτςετͷॻ͖ํ •

    JetpackͳͲΛ࢖ͬͨࠓޙͷల๬
  5. ϦΞϧΧʔυΛ༗ޮԽ͢Δ࣌ ͷը໘Λྫʹઆ໌͠·͢ɻ ※ Ұ෦ίʔυΛมߋ͍ͯ͠·͢

  6. None
  7. 1. ด͡ΔϘλϯ 2. εΫϩʔϧͨ͠ΒӨ͕ͭ ͘Toolbar 3. ΧʔυൃߦࡁΈ͔Ͳ͏͔ APIͰऔಘͯ͠ɺൃߦࡁΈ ͩͬͨΒදࣔΛม͑ΔϨ ΠΞ΢τ

    4. λοϓͨ͠ΒભҠ͢ΔϘ λϯͱϦϯΫ
  8. 7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF

  9. 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)
  10. 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) σʔλऔ͖ͬͯͯ ϨΠΞ΢τʹදࣔ
  11. σʔλऔಘͱϨΠΞ΢τදࣔ • ͲͪΒΛઌʹ࣮૷͢Δ͔͸ɺAPIͱσβΠϯͷ ͲͪΒ͕ઌʹͰ͖͍ͯΔ͔ʹΑΔɻ • API͕ઌʹͰ͖͍ͯΕ͹σʔλऔಘ෦෼ɺσβ Πϯ͕ઌʹ͋Ε͹ϨΠΞ΢τ͔Β࡞Δɻ • ͲͪΒ΋Ͱ͖͍ͯͳ͔ͬͨ৔߹͸ϨΠΞ΢τ͔ Βࡶʹ࡞͓ͬͯ͘ʢKyashͰ͸͋·Γͳ͍ʣ

  12. σʔλऔಘ෦෼ͷ࣮૷ॱ • Ϋϥεґଘͷͳ͍ͱ͜Ζ͔Β࡞ΔɻAPIͷΫϥ ε΍ϝιου͕ͳ͍ͱRepositoryΛ࣮૷Ͱ͖ ͳ͍ʢTDDͰ΍Δ৔߹͸ผͰ͕͢ʣ • API => Repository =>

    UseCase ͷॱ൪ɻ
  13. KyashApi.kt • RetrofitͷΠϯλʔϑΣʔεʹϦΫΤετ༻ͷϝιουΛ௥Ճɻ • Ϩεϙϯε΍ύϥϝʔλͰ৽͍͠Entity͕ඞཁͳΒ͜ͷλΠϛ ϯάͰ࡞͓ͬͯ͘ɻ

  14. KyashCardRepository.kt • nonceΛऔಘͯ͠ɺͦΕΛ࢖ͬͯผͷAPIΛୟ͘ɻ
 RxͷflatMapΛ࢖ͬͯAPIͷ௚ྻԽɻ

  15. CheckKyashCardExistsUseCase.kt • UseCase͸ɺRepositoryͷϝιουͷ݁ՌΛϏδωεϩδοΫʹԊͬͨܗ ʢࠓճͩͱBooleanʣʹՃ޻͢Δɻ
 RxͩͱՃ޻͠΍͍͢ͷͰฦΓ஋͸Single΍Completableʹ͍ͯ͠Δɻ

  16. ʊਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰॳϏϧυɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ

  17. ॳΊͯͷϏϧυ • Ϗϧυ͕஗͍ͷͰɺσʔλऔಘ෦෼͸Ψοͱ Ұؾʹॻ͍ͯ͠·͏͜ͱ͕ଟ͍ɻ • ͜ͷྫͩͱUseCaseʹϩδοΫ͕ೖ͍ͬͯΔ ͷͰϢχοτςετ΋͜ͷλΠϛϯάͰॻ͘ɻ

  18. ϨΠΞ΢τදࣔ෦෼ͷ࣮૷ॱ • Ϋϥεґଘͷͳ͍ͱ͜Ζ͔Β࡞Δɻ • ViewModel => xml => Fragment =>

    Activity
  19. ViewModelͷଊ͑ํ • ViewͷදࣔཁૉΛϓϩύςΟʹ࣋ͭɻ • View͔ΒͷΞΫγϣϯʢϥΠϑαΠΫϧ΍ λοϓͳͲʣΛϝιουͰ࣮૷͢Δɻ • ͲΜͳϓϩύςΟͱΞΫγϣϯ͕ඞཁ͔Λ಄ ͷதͰ੔ཧ͓ͯ͘͠ɻ

  20. 1. ΧʔυൃߦࡁΈ͔Ͳ͏͔νΣοΫ தͷϩʔυதදࣔͷVisibility 2. ൃߦࡁΈͩͬͨ࣌ͷViewͷ Visibility 3. ະൃߦͩͬͨ࣌ͷViewͷVisibility දࣔཁૉͱͳΔϓϩύςΟ

  21. ViewModel.kt - ϓϩύςΟ • ίϯετϥΫλʹ͸ɺΧʔυൃߦࡁΈ͔Ͳ͏͔ΛνΣοΫ͢ΔUseCaseͱը໘ ભҠͷͨΊͷNavigatorΫϥεΛDaggerͰInjectɻ • ViewͷදࣔʹඞཁͳVisibilityͷIntͷϓϩύςΟΛॻ͘ɻ͜ͷྫͰ͸Visibilityͩ ͚͕ͩɺදࣔ͢ΔςΩετͷStringͳͲ΋ViewModelʹॻ͍͍ͯΔɻ

  22. 1. onResumeͰΧʔυൃߦ͍ͯ͠ Δ͔Ͳ͏͔ͷνΣοΫ 2. λοϓͨ͠Βը໘ભҠ ΞΫγϣϯ

  23. ViewModel.kt - onResume() • ϩʔυͨ݁͠ՌʹΑͬͯϓϩύςΟΛมߋ͢Δɻ͜ͷϓϩύςΟΛ͋ͱͰdatabindingͰxmlʹόΠϯυ͢Δͧʔͱ͍͏ؾ࣋ͪͰॻ͘ɻ • ͪͳΈʹ subscribeOnͱobserveOnΛ͜͜Ͱ྆ํ΍Δͷ͸͋·ΓΑ͘ͳ͍ͱࢥ͍ͬͯΔɻ

  24. ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰςετΛॻ͘ɹʻ ʉ^Y^Y^Y^Y^Y^Y^Y^ʉ

  25. σʔλऔಘͱදࣔͷςετ • UseCaseΛϞοΫͯ͠ɺϝιου͕ݺ͹Εͯ ͍Δ͔ΛVerify͢Δɻ • ϝιουͷฦΓ஋ͷ݁ՌʢSingleͷsuccess΍ errorʣʹΑͬͯɺϓϩύςΟͷ஋͕ద੾ʹม ߋ͞Ε͍ͯΔ͔Λςετ͢Δɻ

  26. ViewModel.kt - ด͡ΔϘλϯ • DataBindingͷonClickͰόΠϯυ͢ΔͨΊʹɺҾ਺ʹ͸ViewΛ౉͢ɻ • Navigator͸ݱࡏͷActivityͷࢀরΛ͍࣋ͬͯͯɺfinishActivity() ΛݺͿͱ Activity͕ด͡ΔʢNavigatorΛͻͱͭ࡞Δ΍Γํ͕͍͍͔ʹ͍ͭͯ͸ݕ౼ ͷ༨஍͋ΓͰ͢ʣ

  27. • ͢Ͱʹը໘ભҠઌ͕͋Δ৔߹ʹ͸navigatorͷϝιουΛݺͿΑ͏ʹ͢Δɻ • ·ͩͰ͖͍ͯͳ͍৔߹͸TODOίϝϯτ͚ͩॻ͍͓ͯ͘ɻ ViewModel.kt - ϘλϯͱϦϯΫ

  28. ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰςετΛॻ͘ɹʻ ʉ^Y^Y^Y^Y^Y^Y^Y^ʉ

  29. ը໘ભҠͷςετ • NavigatorΛϞοΫͯ͠ɺద੾ͳϝιουͱҾ ਺͕ݺ͹Ε͍ͯΔ͔ΛVerify͢Δ͜ͱͰը໘ભ ҠͷςετΛॻ͘ɻ

  30. fragment.xml • dataʹViewModelΛએݴɻ • ͜͜ͰඞཁʹͳΔͷͰɺViewModelͷํΛઌʹॻ͘Α͏ʹ͍ͯ͠Δɻ

  31. fragment.xml - Toolbar • Toolbar ͸styleΛηοτ͢Δ͚ͩͰӨͷ༗ແɺ໭ΔϘλϯͷΞΠίϯͳͲΛม ͑ΒΕΔΑ͏ʹ͍ͯ͠Δɻ • navigationOnClickListenerʹViewModelͷΫϦοΫΠϕϯτΛηοτɻ •

    shadowAnimationScrollViewId͸͓ख੡ͷBindingAdapterͰɺScrollViewͷid Ληοτ͢ΔͱεΫϩʔϧ͢ΔͱӨ͕ͭ͘ಈ͖Λ͚ͭΒΕΔɻ
  32. ToolbarExt.kt • Ҿ਺Ͱ౉͞ΕͨϨΠΞ΢τIDΛ΋ͱʹScrollViewΛ୳ͯ͠ɺεΫϩʔϧͨ͠ΒToolbar ͷelevationΛม͑ΔΑ͏ʹ͍ͯ͠Δɻ͜ΕʹݶΒͣɺlottieͷΞχϝʔγϣϯͳͲ Viewͷ໾ׂͰڞ௨ԽͰ͖ͦ͏ͳ΋ͷ͸݁ߏDataBindingͰ΍ΔΑ͏ʹ͍ͯ͠Δɻ

  33. fragment.xml - දࣔ੾Γସ͑

  34. ʊਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰϏϧυᶄɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ

  35. ̎ճ໨ͷϏϧυ • DataBinding͸ͨ·ʹͲ͕͜ѱ͍ͷ͔શ͘Θ͔ Βͳ͍ΤϥʔΛग़͖ͯͯͭ͠Β͍ɻ • xmlʹόΠϯυͨ͋͠ͱͰҰ౓Ϗϧυ͕௨ΔΑ ͏ʹ͓ͯ͘͠ͱ҆৺͢Δɻ

  36. Fragment.kt

  37. Activity.kt

  38. ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜Ͱ֬ೝͷϏϧυɹʻ ʉY^Y^Y^Y^Y^Y^Y^Yʉ

  39. σόοάϝχϡʔ • ೚ҙͷը໘Λϝχϡʔ͔Β
 ։͚ΔΑ͏ʹ͍ͯ͠Δɻ • ͱΓ͋͑ͣ࡞ͬͨը໘Λ
 ͙͢ʹ։͍ͯ֬ೝ͍ͨ࣌͠ʹ
 ศརɻ

  40. Զͷίʔυͷॻ͖ॱ·ͱΊ

  41. σʔλऔಘɺϨΠΞ΢τදࣔ ͷͲͪΒ͔Βઌʹ࣮૷͢Δ͔ ͸APIͱσβΠϯͲͪΒ͕ ઌߦ͍ͯ͠Δ͔࣍ୈ

  42. Ϗϧυ͕஗͍ͷͰ σʔλऔಘ෦෼͸Ұؾʹॻ͘

  43. දࣔ෦෼͸ViewModelͷ ϓϩύςΟͱΞΫγϣϯ ʹ੔ཧͯ͠ॻ͘

  44. DataBindingͰ ͭͳ͛ͯϏϧυͯ͠Έͯ Τϥʔ͕ग़ͳ͍͜ͱΛفΔ

  45. ίʔυͷॻ͖ํ͸ ਓͦΕͧΕ

  46. ઃܭ͞ΕͨΞϓϦͷίʔυΛ ࣮ࡍʹͲ͏ॻ͍͍ͯΔͷ͔ ͱ͍͏঺հͰͨ͠

  47. ͋Γ͕ͱ͏͍͟͝·ͨ͠