рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВ
рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдШрдЯрдХ рдХреЗ рдХрд╛рдо рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЕрд╕реНрдкрд╖реНрдЯ рдЫрд╛рдк рдорд┐рд▓реАред
рдпрд╣ рдЖрд▓реЗрдЦ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ
рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ (рдЕрдиреБрд╡рд╛рдж рднреА рд╣реИрдВ) - рд╡реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ
рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЙрдкрдпреЛрдЧреА рдорд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рджреБрд░реБрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╢рд╛рдпрдж рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдЖрдЬрдорд╛рдпрд╛редрдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рдРрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдПрдВ рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИрдВ:
- рдиреЗрд╡рд┐рдЧреЗрд╢рди рджрд░рд╛рдЬ рдореЗрдВ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛
- рдЕрдкрдиреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдл рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдЦреЛрдЬ
- рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛
рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
рдпрд╣ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЖрдкрдХреЛ рдмрд╕ рдореЗрдиреВ рдЖрдЗрдЯрдо рдЖрдИрдбреА рдХреЛ рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
activity_main_drawer.xml<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:showIn="navigation_view"> <group android:checkableBehavior="single"> <item android:id="@+id/importFragment" android:icon="@drawable/ic_menu_camera" android:title="Import"/> <item android:id="@+id/galleryFragment" android:icon="@drawable/ic_menu_gallery" android:title="Gallery"/> <item android:id="@+id/slideshowFragment" android:icon="@drawable/ic_menu_slideshow" android:title="Slideshow"/>
рдФрд░ рд╕реНрдХреНрд░реАрди рдЖрдИрдбреА (рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдл рдореЗрдВ рдЧрдВрддрд╡реНрдп)
mobile_navigation.xml <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mobile_navigation" app:startDestination="@id/importFragment"> <fragment android:id="@+id/importFragment" android:name="com.xiii.navigationapplication.ImportFragment" android:label="fragment_import" tools:layout="@layout/fragment_import"/> <fragment android:id="@+id/galleryFragment" android:name="com.xiii.navigationapplication.GalleryFragment" android:label="fragment_gallery" tools:layout="@layout/fragment_gallery"/> <fragment android:id="@+id/slideshowFragment" android:name="com.xiii.navigationapplication.SlideshowFragment" android:label="fragment_slideshow" tools:layout="@layout/fragment_slideshow"/> </navigation>
рддрдм рдЖрдкрдХреЛ рдореЗрдиреВ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
MainActivity.kt class MainActivity : AppCompatActivity() { private val navController by lazy(LazyThreadSafetyMode.NONE) { Navigation.findNavController(this, R.id.nav_host_fragment) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(toolbar)
рдореЗрдиреВ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рдЪрдорддреНрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ?
"рд╣реИрдордмрд░реНрдЧрд░" (рдореЗрдиреВ рдЖрдЗрдХрди) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрдм рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ "рдмреИрдХ" рдмрдЯрди рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░
рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд░рд╣рд╛ рдерд╛ (
рдкрд░рд┐рдЪрд┐рдд - рдкреНрд▓реЗ рдорд╛рд░реНрдХреЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рддрд░рд╣) рдФрд░, рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖ?
рд╡рд╣ рд╕рдм рд╣реИ! рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ (рдЕрд░реНрдерд╛рддреН: рдЕрдВрдХ
рджреЛ рдФрд░
рддреАрди ) рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ "рд╣реИрдордмрд░реНрдЧрд░" рдХреЛ рдХреЗрд╡рд▓
рд╢реБрд░реБрдЖрдд , рдпрд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдкрд┐рдЫрд▓рд╛ рдмрдЯрди
рд╕реНрдЯрд╛рд░реНрдЯрдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЧрдВрддрд╡реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ (
addOnNavigatedListener () ) рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЪрд╛рд▓реЗрдВ рд▓рдЧрд╛рдХрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ , рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╡рд░реНрдгрди рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╢рд░реНрддреЛрдВ рдкрд░ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЦреЛрд▓рдирд╛
рдЧрддрд┐рд╡рд┐рдзрд┐ рдПрдХ
рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА, рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ
рдЧрдВрддрд╡реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА
рд╣реИ ред рдиреЗрд╕реНрдЯреЗрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдл рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЦреЛрд▓рдирд╛
рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо
рдХрд░рддрд╛ рд╣реИ , рдпрд╛рдиреА рдПрдХ рдХреЙрд▓:
navController.navigate(R.id.editActivity)
рд╕рдВрдХреНрд░рдордг (рдЦрдВрдбреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХреЛ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЕрдиреБрд░реЛрдзрд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЦреЛрд▓ рджреЗрдЧрд╛ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдЬрдм рд▓рдХреНрд╖реНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдПрдХ
рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ, рдЕрд░реНрдерд╛рдд,
рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╡рд┐рдХрд▓реНрдк 2:

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдиреЛрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВред рдЗрд╕рдореЗрдВ
EditFragment input
рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдЯреБрдХрдбрд╝рд╛ рд╣реЛрдЧрд╛; рдпрд╣ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ
startDestination рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдПрдХ рдлреЛрдЯреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХреИрдорд░рд╛ рд╕реЗ рдПрдХ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
PhotoFragment рдкрд░ рдЬрд╛рдПрдВрдЧреЗред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдл рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
edit_navigation.xml <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/edit_navigation" app:startDestination="@id/editFragment"> <fragment android:id="@+id/editFragment" android:name="com.xiii.navigationapplication.ui.edit.EditFragment" android:label="fragment_edit" tools:layout="@layout/fragment_edit"> <action android:id="@+id/action_editFragment_to_photoFragment" app:destination="@id/photoFragment"/> </fragment> <fragment android:id="@+id/photoFragment" android:name="com.xiii.navigationapplication.ui.edit.PhotoFragment" android:label="fragment_photo" tools:layout="@layout/fragment_photo"/> </navigation>
EditActivity MainActivity рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐
EditActivity рдкрд░ рдХреЛрдИ рдореЗрдиреВ рдирд╣реАрдВ рд╣реИ:
EditActivity.kt class EditActivity : AppCompatActivity() { private val navController by lazy(LazyThreadSafetyMode.NONE) { Navigation.findNavController(this, R.id.nav_host_fragment) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_edit) setSupportActionBar(toolbar) // "" toolbar NavigationUI.setupWithNavController(toolbar, navController) } override fun onSupportNavigateUp() = navController.navigateUp() fun takePhoto(view: View) { navController.navigate(R.id.action_editFragment_to_photoFragment) } }
рдЧрддрд┐рд╡рд┐рдзрд┐ рдЦреБрд▓рддреА рд╣реИ, рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдлрд┐рд░ рд╕реЗ, рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрдЯрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рд╢реБрд░реБрдЖрддреА
EditFragment рдкрд░ "рдмреИрдХ рдЯреВ рдкреИрд░реЗрдВрдЯ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА" рдмрдЯрди рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛)ред рдкреНрд░рд▓реЗрдЦрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдиреВрдиреА рд╣реИ: рдПрдХ рдирдпрд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЧреНрд░рд╛рдл, рдПрдХ рдирдпрд╛
рдкреНрд░рд╛рд░рдВрдн рдореВрд▓реНрдп, "рдмреИрдХ" рдмрдЯрди рдХреЛ
рдкреНрд░рд╛рд░рдВрдн , рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЬреЛ рд▓реЛрдЧ
рдЕрднрд┐рднрд╛рд╡рдХреЛрдВ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ
рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕
рдмреИрд╕рд╛рдЦреА рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
1. рдкреНрд░рдХрдЯ рдореЗрдВ рдореВрд▓ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ <activity android:name=".EditActivity" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBar"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
2. рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЖрдИрдбреА рд╢реБрд░реБрдЖрдд рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ class EditActivity : AppCompatActivity() { private val navController by lazy(LazyThreadSafetyMode.NONE) { Navigation.findNavController(this, R.id.nav_host_fragment) } private var isStartDestination = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_edit) setSupportActionBar(toolbar) val startDestinationId = navController.graph.startDestination // id, NavigationUI.ActionBarOnNavigatedListener // destination startDestination navController.addOnNavigatedListener { controller, destination -> isStartDestination = destination.id == startDestinationId // R.id.fake_start_destination id controller.graph.startDestination = if (isStartDestination) R.id.fake_start_destination else startDestinationId } // "" toolbar NavigationUI.setupActionBarWithNavController(this, navController) } override fun onSupportNavigateUp(): Boolean { // startDestination Navigation Component return if (isStartDestination) super.onSupportNavigateUp() else navController.navigateUp() } fun takePhoto(view: View) { navController.navigate(R.id.action_editFragment_to_photoFragment) } }
рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐
рдиреИрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдПред
ActionBarOnNavigatedListener рд╕рднреА рдЧрдВрддрд╡реНрдп рдкреНрд░рд╛рд░рдВрдн рди рд╣реЛрдВ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░,
NavigationUI.ActionBarOnNavigatedListener рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрдЯрди (рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХрд╛ рд╕рдВрджрд░реНрдн) рдХреЛ рдЫрд┐рдкрд╛рдПрдЧрд╛ рдирд╣реАрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЗрд╕ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ
onSupportNavigateUp () рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╣рд╕реНрддрдХреНрд╖реЗрдк рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐
рдЧрд╣рд░реА рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред
рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛
рдиреЗрд╡реАрдЧреЗрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдПрдХ
рдЧрдВрддрд╡реНрдп рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рддрдВрддреНрд░ рд╣реИ ред рдХреЛрдб рдЬрдирд░реЗрд╢рди (рдЦрд░рд╛рдм рдирд╣реАрдВ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рдЙрдкрдХрд░рдг рднреА рд╣реИред
рдЕрдм рд╣рдо рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдареЛрд╕ рдкрд╛рдВрдЪ рдирд╣реАрдВ рд░рдЦ рд╕рдХрд╛ред
рдЬрдм рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо
EditActivity рдкрд░ рд╡рд╛рдкрд╕
рдЖрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрдИрдбреА - рдЪрд▓реЛ рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:
1. EditActivity рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВрдореИрдВрдиреЗ рдЧреНрд░рд╛рдлрд╝ (рдиреЗрд╡рд┐рдЧреЗрд╢рди) рдХреЗ рдореВрд▓ рддрддреНрд╡ рдореЗрдВ рд╕реАрдзреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рд▓рдХреНрд╖реНрдп рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ, рдХреЗрд╡рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/edit_navigation" app:startDestination="@id/editFragment"> <argument android:name="id" app:argType="integer"/> <fragment android:id="@+id/editFragment" android:name="com.xiii.navigationapplication.ui.edit.EditFragment" android:label="fragment_edit" tools:layout="@layout/fragment_edit"> <action android:id="@+id/action_editFragment_to_photoFragment" app:destination="@id/photoFragment"/> </fragment> <fragment android:id="@+id/photoFragment" android:name="com.xiii.navigationapplication.ui.edit.PhotoFragment" android:label="fragment_photo" tools:layout="@layout/fragment_photo"/> </navigation>
2. рдПрдХреНрд╢рди рдХреЛ рдореБрдЦреНрдп рдЧреНрд░рд╛рдл рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдореИрдВрдиреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдХреЗрд╡рд▓ рдЗрд╕рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mobile_navigation" app:startDestination="@id/importFragment"> <fragment android:id="@+id/importFragment" android:name="com.xiii.navigationapplication.ImportFragment" android:label="fragment_import" tools:layout="@layout/fragment_import"> <action android:id="@+id/add" app:destination="@id/editActivity"> <argument android:name="id" app:argType="integer" android:defaultValue="0"/> </action> <action android:id="@+id/edit" app:destination="@id/editActivity"> <argument android:name="id" app:argType="integer"/> </action> </fragment> <fragment android:id="@+id/galleryFragment" android:name="com.xiii.navigationapplication.GalleryFragment" android:label="fragment_gallery" tools:layout="@layout/fragment_gallery"/> <fragment android:id="@+id/slideshowFragment" android:name="com.xiii.navigationapplication.SlideshowFragment" android:label="fragment_slideshow" tools:layout="@layout/fragment_slideshow"/> <activity android:id="@+id/editActivity" android:name="com.xiii.navigationapplication.EditActivity" android:label="activity_edit" tools:layout="@layout/activity_edit"/> </navigation>
3. рдкреИрд░рд╛рдореАрдЯрд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдФрд░ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
ImportFragmentDirections рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╕реБрд░рдХреНрд╖рд┐рдд-args рд╡рд░реНрдЧ рд╣реИред
val direction = ImportFragmentDirections.edit(123 ) navController.navigate(direction)
3. рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ class EditFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
рдЖрдк,
EditFragment рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди
рджреЗрддреЗ рд╣реИрдВ ред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдкрд╛рджрд┐рдд рдХреНрд░рд┐рдпрд╛ (рдмрд┐рдВрджреБ 1 рд╕реЗ),
EditActivity рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдкрд╛рд░рд┐рдд
рдХрд░рддреА рд╣реИ , рдФрд░ рдЗрд╕рдХреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрд╣
рд▓рд╛рд▓рдЪреА рд╣реИ рдХрд┐
рдпрд╣ рдЗрд╕реЗ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдирд╣реАрдВ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
navController.graph.setDefaultArguments () ) рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗред
рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдХреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
StackOwerflow рдкрд░ рдПрдХ рддрд░реАрдХрд╛ рд╡рд░реНрдгрд┐рдд рд╣реИред
рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдИ рддрдм рдкреИрджрд╛ рд╣реЛрдЧреА рдЬрдм рдПрдХ рд╕рд╛рде
рд╢реБрд░реБрдЖрдд рдФрд░ рд╕рд╛рдорд╛рдиреНрдп
рдЧрдВрддрд╡реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ ред рдпрд╣реА рд╣реИ, рдЬрдм рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЗрд╕ рдЧреНрд░рд╛рдл рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп
рдЧрдВрддрд╡реНрдп рд╕реЗ
рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХрд╣рд╛рдВ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдП: рддрд░реНрдХреЛрдВ рд╕реЗ рдпрд╛ рдЗрд░рд╛рджреЗ рд╕реЗред рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░, рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реВрдЪреАрдмрджреНрдз
рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореБрдЭреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреА, рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рдеред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдХрд╛ рдХрд╛рдо рдХреЛрдб!
рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░
GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред