ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ Π² Android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠΎΠ²
Π¨Π°Π±Π»ΠΎΠ½ βΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡβ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² iOS-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈ Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π‘ΠΎΡΡΡΠ΅ΠΌ Π₯Π°Π½Π»ΠΎΡ (Soroush Khanlou) Ρ ΡΠ΅Π»ΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΡΡ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° Π‘ΠΎΡΡΡΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Application Controller, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π² ΠΊΠ½ΠΈΠ³Π΅ Patterns of Enterprise Application Architecture ΠΠ°ΡΡΠΈΠ½ΠΎΠΌ Π€Π°ΡΠ»Π΅ΡΠΎΠΌ (Martin Fowler).
Π¨Π°Π±Π»ΠΎΠ½ βΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡβ ΠΏΡΠΈΠ·Π²Π°Π½ ΡΠ΅ΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
ΠΠΎΠ³ΠΈΠΊΠ° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½Π° Π² Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ/ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Android SDK ΡΡΠ΅Π±ΡΠ΅Ρ Context Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ (ΠΈΠ»ΠΈ FragmentManager Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π² Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ), Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ Π»ΠΎΠ³ΠΈΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ/ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅. ΠΠ°ΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ Android SDK ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π° Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ. Π£Π΄ΠΎΠ±Π½ΠΎ Π»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΊΠΎΠ΄? ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΠΎΠ·ΡΠ°Π·ΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΡ ΠΈ Π½Π°Π·Π²Π°ΡΡ Π΅Π΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Navigator, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ:
ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ, Π½ΠΎ Ρ ΠΎΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ Ρ MVVM/MVP
ΠΠ°ΡΠ½Ρ Ρ Π²ΠΎΠΏΡΠΎΡΠ°: Π³Π΄Π΅ Π±Ρ Π²Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ MVVM/MVP?
Π ΡΠ»ΠΎΠ΅ ΠΏΠΎΠ΄ ΠΏΡΠ΅Π·Π΅Π½ΡΠ΅ΡΠΎΠΌ (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ)? ΠΠ΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π·Π΅Π½ΡΠ΅ΡΠ°Ρ .
Π ΡΠ»ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ? ΠΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡΠ΅Π·Π΅Π½ΡΠ΅ΡΠΎΠΌ/ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ? ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ»ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ MVVM, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ SingleLiveEvents ΠΈΠ»ΠΈ EventObserver
ΠΠ»ΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠΌ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ EventObserverβΠ° ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΈ ΠΊ ΠΏΡΠ΅Π·Π΅Π½ΡΠ΅ΡΡ. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΡΠΆΠ°ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ.
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ
Π’Π°ΠΊ Π³Π΄Π΅ ΠΆΠ΅ Π½Π°ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ? ΠΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ°? Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ΅ΡΠ΅Π±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π»ΠΎΠ³ΠΈΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ, Ρ ΠΎΡΡ ΠΌΡ ΠΈ Π²ΡΠ½Π΅ΡΠ»ΠΈ Π΅Π΅ Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ. Π‘Π»Π΅Π΄ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Ρ Π½Π°Ρ ΠΎΡΡΠ°Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ. ΠΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ? Π Π°Π·Π²Π΅ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΡ? ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°.
βΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ?β β ΡΠΏΡΠΎΡΠΈΡΠ΅ Π²Ρ. Π‘ΡΠΎΠΈΡ Π»ΠΈ ΡΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ? Π ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΡΠ°Π΄ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ A/B ΡΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΠΊΠΊΠ°ΡΠ½Ρ ΠΈ Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡΡΡΡ. Π£ Π½Π°Ρ ΡΠΆΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°, Π³Π΄Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΠ»ΡΡ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π»ΠΈΠ±ΠΎ ΡΠΊΡΠ°Π½ Π»ΠΎΠ³ΠΈΠ½Π° Π»ΠΈΠ±ΠΎ Π³Π»Π°Π²Π½ΡΠΉ ΡΠΊΡΠ°Π½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ΄Π°, ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΠ½Π΅ΡΡΠΈ ΠΊΠΎΠ΄ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠ΄Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ° ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. ΠΠ½ Π·Π½Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΊΡΠ°Π½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°Π΄ΠΎ ΠΎΡΠΊΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΠΏΠ»Π°ΡΡ Π·Π°ΠΊΠ°Π·Π°, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ Π·Π½Π°Π΅Ρ, ΡΡΠΎ Π΄Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΊΡΡΡΡ ΡΠΊΡΠ°Π½ ΠΎΠΏΠ»Π°ΡΡ. Π iOS ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²ΠΈΡ Π»ΠΎΠΊΠ°ΡΠΎΡΠ°, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ViewControllerβΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΡΠΊΡΡΠ΅ΠΊΠΎΠΌ. ΠΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ° (ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΏΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ). Π Android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ, Ρ Π½Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ Π΅ΡΡΡ Π±Π΅ΠΊΡΡΠ΅ΠΊ Π΄Π»Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ². Π ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°: ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΏΡΠΎΡΡΠΎ Π·Π½Π°Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΊΡΠ°Π½ Π±ΡΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ.
ΠΡΠΈΠΌΠ΅Ρ: ΠΠΎΠ²ΠΎΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ Π½ΠΎΠ²ΠΎΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ 2 ΡΠΊΡΠ°Π½Π°: βΡΠΏΠΈΡΠΎΠΊ ΡΡΠ°ΡΠ΅ΠΉβ ΠΈ βΡΠ΅ΠΊΡΡ ΡΡΠ°ΡΡΠΈβ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ (Flow) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠ°Π½ΠΎΠ². Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΎΠ²ΠΎΡΡΠ½ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 2 ΡΠΊΡΠ°Π½ΠΎΠ²: βΡΠΏΠΈΡΠΎΠΊ ΡΡΠ°ΡΠ΅ΠΉβ ΠΈ βΡΠ΅ΠΊΡΡ ΡΡΠ°ΡΡΠΈβ. ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌ. ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ NewsFlowCoordinator#start() ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ°ΡΠ΅ΠΉ. ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ»ΠΈΠΊΠ°Π΅Ρ ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ NewsFlowCoordinator#readNewsArticle(id) ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΊΡΠ°Π½ Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΡΠ°ΡΡΠΈ. ΠΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠΎΠΌ (ΠΎΠ± ΡΡΠΎΠΌ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅), ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ Π΄Π΅Π»Π΅Π³ΠΈΡΡΠ΅ΠΌ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΊΡΠ°Π½Π°. Π£ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΎΠ½ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅ΠΊΡΡΠ΅ΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΡ: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΡΠ΄Π° ΠΏΠΎΠΉΡΠΈ Π΄Π°Π»ΡΡΠ΅.
ΠΠΎ ΠΊΠ°ΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ Ρ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ? ΠΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ: ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΡΠΌΠ±Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΏΠ°Π΅Ρ ΠΏΠΎ ΡΡΠ°ΡΡΠ΅.
Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΠΌΠ΅Π½Ρ ΡΠΊΡΠ°Π½ΠΎΠ². Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ° ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π° Π²Π°ΡΠ΅ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΈ Π»ΠΈΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΠΉ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (ΠΎΠ΄ΠΈΠ½ ΡΠΊΡΠ°Π½ β ΠΎΠ΄ΠΈΠ½ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ). Π― ΠΏΡΠΈΠ²ΠΎΠΆΡ Π½Π°ΠΈΠ²Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ°:
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ° Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° β Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΡΡΠ΅ΡΠ½ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Singleton ΡΠΊΠΎΡΠΏ Π² Π΄Π°Π³Π³Π΅ΡΠ΅) ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈΡΠΎΠ²Π°Π½Ρ Π² Application#onCreate().
ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π² Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΊΡΠ°Π½ Π»ΠΎΠ³ΠΈΠ½Π° (LoginFragment + LoginViewModel, Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΌΡ ΠΎΠΏΡΡΡΠΈΠΌ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ) ΠΈ LoginFlowCoordinator. ΠΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π² NewsFlowCoordinator? ΠΡ ΠΆΠ΅ Π½Π΅ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ God-Coordinator, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π²ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ? Π’Π°ΠΊΠΆΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ, Π²Π΅ΡΠ½ΠΎ?
ΠΠ΄Π΅ΡΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ UI-ΠΈΠ²Π΅Π½Ρ Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π»ΡΠΌΠ±Π΄Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅Ρ Π»ΡΠΌΠ±Π΄Ρ Π΄Π»Ρ ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠ½Π°. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅ΡΠ°Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π»ΡΠΌΠ±Π΄Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΡΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ RootFlowCoordinator ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΌΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, RootFlowCoordinator Π±ΡΠ΄Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π½Π°ΡΠ΅ΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ NewsFlowCoordinator. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π½Π°ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° RootFlowCoordinator. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½, ΡΠΎ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π» Π»ΠΈ ΠΎΠ½ ΠΎΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³ (ΠΎΠ± ΡΡΠΎΠΌ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅) ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΎΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ LoginViewModel Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ°ΡΡΠΈΡ Π² ΡΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅. ΠΠΏΠΈΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³Π°.
ΠΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ OnboardingFlowCoordinator#start(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ WelcomeFragment (WelcomeViewModel). ΠΠΎΡΠ»Π΅ ΠΊΠ»ΠΈΠΊΠ° ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ βnextβ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ OnboardingFlowCoordinator#welcomeShown(). ΠΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΊΡΠ°Π½ PersonalInterestFragment + PersonalInterestViewModel, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ. ΠΠΎΡΠ»Π΅ Π²ΡΠ±ΠΎΡΠ° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΏΠ°Π΅Ρ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ βnextβ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ OnboardingFlowCoordinator#onboardingCompleted(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅Ρ Π²ΡΠ·ΠΎΠ² RootFlowCoordinator#onboardingCompleted(), ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ NewsFlowCoordinator.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Ρ A/B ΡΠ΅ΡΡΠ°ΠΌΠΈ. Π― Π΄ΠΎΠ±Π°Π²Π»Ρ ΡΠΊΡΠ°Π½ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΠΏΠΎΠΊΡΠΏΠΊΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π±ΡΠ΄Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ.
Π ΡΠ½ΠΎΠ²Π° ΠΌΡ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ. Π Π΅ΡΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ InAppPurchaseFragment Π² ΠΎΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΎΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΡΠΏΠΎΠΊ ΠΈ Π΅Π³ΠΎ viewmodel ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΌΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ . ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°nΡ Π/Π ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΎΠ½Π±ΠΎΡΠ΄ΠΈΠ½Π³Π°.
ΠΠΎΠ»Π½ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° Π³ΠΈΡΡ Π°Π±Π΅, Π° Π΄Π»Ρ Π»Π΅Π½ΠΈΠ²ΡΡ Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ» Π²ΠΈΠ΄Π΅ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ
ΠΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΠΎΠ²Π΅Ρ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΠ»ΠΈΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ dsl Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠΎΠ² Π² Π²ΠΈΠ΄Π΅ Π³ΡΠ°ΡΠ° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ.
ΠΡΠΎΠ³ΠΈ:
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ½Π΅ΡΡΠΈ Π»ΠΎΠ³ΠΈΠΊΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π² ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ»Π°Π±ΠΎΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅Ρ production-ready Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Ρ ΠΎΠΏΠΈΡΠ°Π» Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π»ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ? ΠΠ΅ Π·Π½Π°Ρ, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ ΠΈ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Π³ΠΊΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°.
Π ΡΡΠ°ΡΡΠ΅ Π½Π΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ° Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ MVI. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ Ρ ΡΡΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ? ΠΠ°, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΡΡ.
ΠΡΠ³Π» Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Navigation Controller ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Android Jetpack. ΠΠ°ΠΊ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΡΠΎΠΎΡΠ½ΠΎΡΠΈΡΡΡ Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠ΅ΠΉ ΠΎΡ Π³ΡΠ³Π»Π°? ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ Navigation Controller Π²ΠΌΠ΅ΡΡΠΎ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ° Π² ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ².
Π Π΅ΡΠ»ΠΈ Ρ Π½Π΅ Ρ ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ/Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ ΠΈ Ρ ΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ Π±Π΅ΠΊΡΡΠ΅ΠΊ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΡΡ Π°ΠΌΠΈ β ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅? Π― ΡΠΎΠΆΠ΅ Π·Π°Π΄ΡΠΌΠ°Π»ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π°Π΄ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠΌ. Π― Π½Π°ΠΏΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π² ΡΠ²ΠΎΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅. ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ Π°Π²ΡΠΎΠΌΠ°Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΡΠΏΡΠΎΡΡΠΈΡ Π·Π°Π΄Π°ΡΡ.
ΠΡΠΈΠ²ΡΠ·Π°Π½ Π»ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡ ΠΊ single-activity-application ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ? ΠΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ . Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΡΠ°Π½Π°ΠΌΠΈ ΡΠΊΡΡΡΠ° Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ΅.
ΠΡΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ. ΠΡ ΠΆΠ΅ Π²ΡΠΎΠ΄Π΅ ΠΏΡΡΠ°Π»ΠΈΡΡ ΡΠΉΡΠΈ ΠΎΡ God-Objectβa? ΠΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΡΠΌΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ²? ΠΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ² Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ΅, ΡΠΎΠ³Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ/ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π·Π½Π°ΡΡ ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ/ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠ°Π½Π΅. ΠΠ°ΠΊ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ ΡΠ·Π½Π°Π΅Ρ ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ? ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π ΠΈ Π. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅ onFragmentViewCreated(v: View) Ρ ΠΏΠΎΠΌΠΎΡΡΡ FragmentLifecycleCallback ΠΈ ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΡΠΌΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅: Π΄ΠΎΠ±Π°Π²ΠΈΡΡ OnPreDrawListener ΡΡΠΎΠ±Ρ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΈ Π²ΡΠ·Π²Π°ΡΡ startPostponedEnterTransition(). ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ActivityLifecycleCallbacks ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ViewGroup Ρ ΠΏΠΎΠΌΠΎΡΡΡ OnHierarchyChangeListener. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΠΎΡΠΎΠΌ ΠΎΡΠΏΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ Π΄Π»Ρ Android Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Navigation Architecture Component: ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌΠΈ Navigation Architecture Component. Π‘ΡΠ°ΡΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ:
Π§Π°ΡΡΡ 1. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΡ
β 1.1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
β 1.2. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Dependencies)
β 1.3. Π‘ΡΡΠ°Π½ΠΈΡΡ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ²
β 1.4. ΠΠ΄ΡΠ΅ΡΠ°: ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠΈΠΏΠ° Β«NavigationΒ»
β 1.5. Π€ΡΠ΅ΠΉΠΌ: Π²ΠΈΠ΄ΠΆΠ΅Ρ NavHostFragment
Π§Π°ΡΡΡ 2. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ
β 2.1. ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
β 2.2. ΠΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ (Drawer)
β 2.3. ΠΠ°Π½Π΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²: Toolbar Π²ΠΌΠ΅ΡΡΠΎ ActionBar
β 2.4. ΠΠΈΠΆΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ (Bottom Navigation)
β 2.5. ΠΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ (Overflow Menu)
ΠΡΠ°ΡΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° github
Π§Π°ΡΡΡ 1. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΡ
1.1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΠΎΡΠ»ΠΈΠ½Π°, IDE Android Studio Π²Π΅ΡΡΠΈΠΈ Π½Π΅ Π½ΠΈΠΆΠ΅ 3.3, ΡΠΌΠ°ΡΡΡΠΎΠ½ ΠΈΠ»ΠΈ ΡΠΌΡΠ»ΡΡΠΎΡ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ API 14 ΠΈΠ»ΠΈ Π²ΡΡΠ΅.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² Android Studio Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«Navigation2019Β».
IDE ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Π³Π»Π°Π²Π½ΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Β«MainActivity.ktΒ» ΠΈ Π΅Π³ΠΎ ΠΌΠ°ΠΊΠ΅Ρ (ΡΠ°Π±Π»ΠΎΠ½) Β«activity_main.xmlΒ».
1.2. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Dependencies)
ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» Β«build.gradleΒ» ΠΌΠΎΠ΄ΡΠ»Ρ (Π½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ) ΠΈ Π² Π±Π»ΠΎΠΊ Β«dependenciesΒ» Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²Π΅ΡΡΠΈΠΈ 1.0.0, Π½ΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ²Π»ΡΡΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π΄Π΅ΡΡ.
1.3. Π‘ΡΡΠ°Π½ΠΈΡΡ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ²
IDE ΡΠΎΠ·Π΄Π°ΡΡ kt-ΡΠ°ΠΉΠ» Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈ xml-ΡΠ°ΠΉΠ» Ρ ΠΌΠ°ΠΊΠ΅ΡΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π΅ΡΡ ΡΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° (Β«Fragment2Β», Β«Fragment3Β», Β«Fragment4Β»). ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
1.4. ΠΠ΄ΡΠ΅ΡΠ°: ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠΈΠΏΠ° Β«NavigationΒ»
ΠΠ»ΠΈΠΊΠ½ΡΠ² ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ΅ Β«resΒ», ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠΈΠΏΠ° Β«NavigationΒ» Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«routes.xmlΒ» (Β«ΠΌΠ°ΡΡΡΡΡΡΒ»).
ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«New DestinationΒ» Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΡΡ ΡΡ Π΅ΠΌΡ Π½Π°ΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ.
Β«Π₯Π²Π°ΡΠ°ΡΡΡΒ» ΠΌΡΡΠΊΠΎΠΉ Π·Π° ΡΠΎΡΠΊΡ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ, Π½Π°ΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ (id) Β«fragment1Β», Β«fragment2Β», Β«fragment3Β», Β«fragment4Β». ΠΡΠΎ Β«Π°Π΄ΡΠ΅ΡΠ°Β», ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΏΡΠ½ΠΊΡΠΎΠ² Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Β«destinationsΒ») Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ.
ΠΡΠΎΠΌΠ΅ Β«idΒ», ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅Π³ Β«fragmentΒ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅ΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°: Β«nameΒ», Β«labelΒ» ΠΈ Β«layoutΒ». ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Β«nameΒ» ΠΈ Β«layoutΒ» Π½Π°Ρ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ ΡΡΠΎΠΈΡ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ Β«routes.xmlΒ» β ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ (Β«labelΒ») ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΠΌΠ΅Π½ΠΈΠΌ ΠΈΡ Π½Π° Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ β1Β», Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ β2Β», Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ β3Β» ΠΈ Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ β4Β».
1.5. Π€ΡΠ΅ΠΉΠΌ: Π²ΠΈΠ΄ΠΆΠ΅Ρ NavHostFragment
ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΌΠ°ΠΊΠ΅ΡΠ° Β«res/layout/activity_main.xmlΒ» ΠΈ ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ Β«Hello World!Β», ΠΎΠ½ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. Π ΠΏΠ°Π»ΠΈΡΡΠ΅ (Palette) Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π» Β«ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΒ» (Containers) ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΠΌ ΠΎΡΡΡΠ΄Π° Π½Π° ΠΌΠ°ΠΊΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ NavHostFragment (ΡΠΊΠ°Π·Π°Π² Π½Π°Ρ ΡΠ°ΠΉΠ» Β«routesΒ» Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ Π½Π΅Π³ΠΎ). ΠΠ½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠΎΠ»Ρ ΡΡΠ΅ΠΉΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ id ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π½Π° Β«navFragmentΒ». ΠΠΎΠ΄ ΠΌΠ°ΠΊΠ΅ΡΠ° Π³Π»Π°Π²Π½ΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΊ:
ΠΠ° ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ.
Π§Π°ΡΡΡ 2. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ
2.1. ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ
ΠΡΠΊΡΠΎΠ΅ΠΌ ΠΌΠ°ΠΊΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° (Β«fragment_fragment1.xmlΒ»). Π£Π΄Π°Π»ΠΈΠΌ Π½Π΅Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠΈΠΏ ΠΌΠ°ΠΊΠ΅ΡΠ° Ρ Β«FrameLayoutΒ» Π½Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ Β«button2Β», Β«button3Β», Β«button4Β» ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ 2Β», Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ 3Β», Β«Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ 4Β».
Π ΠΌΠ΅ΡΠΎΠ΄Π΅ Β«onCreateViewΒ» ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ (ΠΎΠ±ΡΠ΅ΠΊΡ Β«NavControllerΒ») ΠΈ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ: ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Β«setOnClickListenerΒ» Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ Π°Π΄ΡΠ΅Ρ (id) ΡΠΎΡΠΊΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡΡΡ (navigate) Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ.
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°ΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ.
ΠΠ΄Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° β ΠΎΠ΄Π½Π° ΡΡΡΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π° β ΠΈ ΠΊΠ»ΠΈΠΊ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ Π½Π°Ρ ΠΊ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ. ΠΡΠΎΡΡΠΎ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
ΠΠΎ Π±Π΅Π· ΠΌΠ΅Π½Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΠ°Π·Π°Π΄Β» Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π½Π° ΡΡΠ°ΡΡΠΎΠ²ΡΠΉ ΡΠΊΡΠ°Π½.
2.2. ΠΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ (drawer)
2.2.1. Π Π΅ΡΡΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠ΅Π½Ρ
Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Β«res/menuΒ» ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠ΅Π½Ρ Β«drawer_menu.xmlΒ». ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΠΏΡΠ½ΠΊΡΡ ΠΌΠ΅Π½Ρ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅Π³ Β«itemΒ» Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Β«idΒ» (Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠ²ΠΎΠΌΡ Π² Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠΌ Π³ΡΠ°ΡΠ΅ Β«routes.xmlΒ», Β«titleΒ» (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ), Β«iconΒ» (ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΠΎΠ², Π½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ) ΠΈ Π΄Ρ. ΠΠ°ΡΠ΅ ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
2.2.2. Π¨Π°Π±Π»ΠΎΠ½ DrawerLayout ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ NavigationView Π² ΠΌΠ°ΠΊΠ΅ΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ
ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΌΠ°ΠΊΠ΅ΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Β«activity_main.xmlΒ».
ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ΅Π³Π° (xml versionβ¦) Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π°ΡΠ°Π»ΠΎ ΡΠ΅Π³Π° Β«DrawerLayoutΒ».
Π ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ Β«NavigationViewΒ» ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΡΠ΅Π³Π° Β«DrawerLayoutΒ».
2.2.3. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ
ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» Β«MainActivity.ktΒ» ΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Β«onCreateΒ» ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° Β«navControllerΒ» (Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Π±ΡΠ»ΠΎ Π²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°Ρ ).
ΠΠ°ΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠΈΠΌ Π±ΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ:
ΠΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΡΠ²Π°ΠΉΠΏ ΠΎΡ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΡΠ°Ρ ΡΠΊΡΠ°Π½Π°:
Π₯ΠΎΡΠΎΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΠ»Π΅Π²Π°-Π²Π²Π΅ΡΡ Ρ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° Π±ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ, Π²Π΅ΡΠ½ΠΎ?
2.3. ΠΠ½ΠΎΠΏΠΊΠ° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ActionBar, ΠΊΠ°ΠΊ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π½Π° Toolbar.
Π§ΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ActionBar, Π² ΡΠ°ΠΉΠ»Π΅ Β«res/values/styles.xmlΒ» Π½Π°ΠΉΠ΄ΡΠΌ ΡΡΡΠΎΠΊΡ
ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Β«DarkActionBarΒ» Π½Π° Β«NoActionBarΒ».
ΠΡΠ»ΠΈΡΠ½ΠΎ, ActionBar ΠΌΡ ΠΎΡΠΊΠ»ΡΡΠΈΠ»ΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Toolbar. ΠΡΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» Β«activity_main.xmlΒ», Π² ΠΏΠ°Π»ΠΈΡΡΠ΅ (Palette) Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π» Β«ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΒ» (Containers) ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΠΌ ΠΎΡΡΡΠ΄Π° Π½Π° ΠΌΠ°ΠΊΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ Β«ToolbarΒ». ΠΠ°Π½Π΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°, Π½ΠΎ ΠΎΠ½Π° ΠΏΠΎΠΊΠ° ΠΏΡΡΡΠ°.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΠ°ΠΉΠ» Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Β«MainActivity.ktΒ». Π§ΡΠΎΠ±Ρ Π½Π° Toolbar Π²ΡΠ²Π΅ΡΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, Π² ΠΌΠ΅ΡΠΎΠ΄ Β«onCreate()Β» Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ:
Toolbar ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΠ²Π΅ΡΡ Β» (Up) Π΄Π»Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ½ΠΎΠΏΠΊΠ° Β«Π²Π²Π΅ΡΡ
Β» Π² android’Π΅ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΡΡΠ΅Π»ΠΊΠΎΠΉ Β«Π²Π»Π΅Π²ΠΎΒ»:
Π§ΡΠΎΠ±Ρ Π½Π° ΡΡΠ°ΡΡΠΎΠ²ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠ»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°-Π³Π°ΠΌΠ±ΡΡΠ³Π΅Ρ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Β«drawerLayoutΒ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ id Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° DrawerLayout ΠΈΠ· ΡΠ°ΠΉΠ»Π° Β«activity_main.xmlΒ».
ΠΠ»ΠΈΠΊ ΠΏΠΎ ΡΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π±ΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ.
2.4. ΠΠΈΠΆΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ (Bottom Navigation)
ΠΠ½ΠΎΠ³Π΄Π° Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°ΠΊΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ , ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½ΠΈΠΆΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² ΡΡΠ΅ΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠ΅Π½Ρ Β«bottom_nav_menu.xmlΒ» Ρ ΠΏΠ°ΡΠΎΠΉ ΡΡΡΠ»ΠΎΠΊ. ΠΠ°ΡΠ΅ΠΌ ΠΎΡΠΊΡΠΎΠ΅ΠΌ ΠΌΠ°ΠΊΠ΅Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° β3 (ΡΠ°ΠΉΠ» Β«fragment_fragment3.xmlΒ») ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΠΌ Π½Π° Π½Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ Β«BottomNavigationViewΒ», ΠΏΠΎΠΏΡΡΠ½ΠΎ ΡΠΎΠ³Π»Π°ΡΠΈΠ²ΡΠΈΡΡ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ IDE Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² dependencies Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Β«com.android.support:designΒ».
ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ Π½ΠΈΠΆΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ Π½Π΅ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, Π° ΡΡΠ°Π·Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ , ΡΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄ Β«onCreateΒ» ΠΊΠ»Π°ΡΡΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ (ΡΠ°ΠΉΠ» Β«MainActivity.ktΒ») Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ Β«BottomNavigationViewΒ» Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°Π΄ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΌΠ°ΠΊΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π° Π½Π΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°.
ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅Π½Ρ Π½Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ β3, ΡΠΎ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΊΠ»Π°ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° (ΡΠ°ΠΉΠ» Β«Fragment3.ktΒ»), Π° ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅:
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½ΠΈΠΆΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² 3-ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅.
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ, ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΈ Π² 4-ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅.
2.5. ΠΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ (Overflow Menu)
ΠΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ΄ ΠΌΠ΅Π½Ρ β Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ (ΡΡΡΠΌ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ ΡΠΎΡΠΊΠ°ΠΌ) Π² ΠΏΡΠ°Π²ΠΎΠΌ Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ³Π»Ρ ΡΠΊΡΠ°Π½Π°.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠ΅Π½Ρ Β«top_right_menu.xmlΒ» Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ.
Π ΡΠ°ΠΉΠ»Π΅ Β«MainActivityΒ» Π² ΠΌΠ΅ΡΠΎΠ΄ Β«onCreateΒ» ΠΏΠ΅ΡΠ΅Π΄ Β«toolBar.setupWithNavController. Β» Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΡΠΎΠΊΡ Β«setSupportActionBar(toolBar)Β».
Π Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°:
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ Π½Π° Π²Π΅ΡΡ Π½ΡΡ ΠΏΡΠ°Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ:
ΠΡΠ°ΡΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° github
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Navigation Architecture Component ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΡΡΡΠ΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. Π‘Π»ΠΎΠΆΠ½ΡΠ΅ Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΠ°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π°.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π±ΡΠ»ΠΎ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π² android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ»ΠΈ ΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ ΠΎΡΡΠ°Π²Π»Π΅Π½Ρ Π·Π° ΠΊΠ°Π΄ΡΠΎΠΌ.
ΠΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΈΡΠΊΡΡΡΠΈΠΈ, Π½ΠΎ ΠΠ°ΡΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ°ΠΉΡΠ° ΠΈ ΠΏΠΎΡΠΎΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ.




































