$30 off During Our Annual Pro Sale. View Details »

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

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

Kyash meetup #1

konifar

June 19, 2018
Tweet

More Decks by konifar

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. ࠓ೔࿩͢͜ͱ
    • Kyash AndroidΞϓϦͰ৽͍͠ը໘Λ։ൃ͢Δ
    ࣌ʹɺࣗ෼͕Ͳ͏͍͏ॱ൪ͰԿΛߟ͑ͳ͕Β
    ίʔυΛॻ͍͍ͯΔͷ͔ɻ


    ※ ݱঢ়͜͏΍ͬͯΔΑɺͱ͍͏࿩Ͱվળ఺΋͋Γ·͢ɻKyashͰ͸ৗʹมԽΛ
    ָ͠Έͳ͕Β։ൃ͍ͯ͠·͢ɻ

    View Slide

  4. ࠓ೔࿩͞ͳ͍͜ͱ
    • MVVMͷৄࡉͳઆ໌
    • DataBindingͷجຊతͳ಺༰
    • DIɾDaggerͷઆ໌
    • Ϣχοτςετͷॻ͖ํ
    • JetpackͳͲΛ࢖ͬͨࠓޙͷల๬

    View Slide

  5. ϦΞϧΧʔυΛ༗ޮԽ͢Δ࣌
    ͷը໘Λྫʹઆ໌͠·͢ɻ
    ※ Ұ෦ίʔυΛมߋ͍ͯ͠·͢

    View Slide

  6. View Slide

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

    View Slide

  8. 7JFX.PEFM
    6TF$BTF
    3FQPTJUPSZ
    7JFX
    "1*1SFGFSFODF

    View Slide

  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)

    View Slide

  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)
    σʔλऔ͖ͬͯͯ ϨΠΞ΢τʹදࣔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    RxͷflatMapΛ࢖ͬͯAPIͷ௚ྻԽɻ

    View Slide

  15. CheckKyashCardExistsUseCase.kt
    • UseCase͸ɺRepositoryͷϝιουͷ݁ՌΛϏδωεϩδοΫʹԊͬͨܗ
    ʢࠓճͩͱBooleanʣʹՃ޻͢Δɻ

    RxͩͱՃ޻͠΍͍͢ͷͰฦΓ஋͸Single΍Completableʹ͍ͯ͠Δɻ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. fragment.xml - Toolbar
    • Toolbar ͸styleΛηοτ͢Δ͚ͩͰӨͷ༗ແɺ໭ΔϘλϯͷΞΠίϯͳͲΛม
    ͑ΒΕΔΑ͏ʹ͍ͯ͠Δɻ
    • navigationOnClickListenerʹViewModelͷΫϦοΫΠϕϯτΛηοτɻ
    • shadowAnimationScrollViewId͸͓ख੡ͷBindingAdapterͰɺScrollViewͷid
    Ληοτ͢ΔͱεΫϩʔϧ͢ΔͱӨ͕ͭ͘ಈ͖Λ͚ͭΒΕΔɻ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. Fragment.kt

    View Slide

  37. Activity.kt

    View Slide

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

    View Slide

  39. σόοάϝχϡʔ
    • ೚ҙͷը໘Λϝχϡʔ͔Β

    ։͚ΔΑ͏ʹ͍ͯ͠Δɻ
    • ͱΓ͋͑ͣ࡞ͬͨը໘Λ

    ͙͢ʹ։͍ͯ֬ೝ͍ͨ࣌͠ʹ

    ศརɻ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide