Komponen Navigasi menyediakan cara untuk membuat dan berinteraksi secara terprogram dengan elemen navigasi tertentu.
Membuat NavHostFragment
Anda dapat menggunakan NavHostFragment.create()
untuk membuat NavHostFragment
secara terprogram dengan sumber daya grafik tertentu, seperti yang ditunjukkan dalam contoh di bawah ini:
Kotlin
val finalHost = NavHostFragment.create(R.navigation.example_graph) supportFragmentManager.beginTransaction() .replace(R.id.nav_host, finalHost) .setPrimaryNavigationFragment(finalHost) // this is the equivalent to app:defaultNavHost="true" .commit()
Java
NavHostFragment finalHost = NavHostFragment.create(R.navigation.example_graph); getSupportFragmentManager().beginTransaction() .replace(R.id.nav_host, finalHost) .setPrimaryNavigationFragment(finalHost) // this is the equivalent to app:defaultNavHost="true" .commit();
Perhatikan bahwa setPrimaryNavigationFragment(finalHost)
memungkinkan sistem intersepsi NavHost
Anda menekan tombol Kembali. Anda juga dapat menerapkan perilaku ini dalam XML NavHost
Anda dengan menambahkan app:defaultNavHost="true"
. Jika Anda menerapkan perilaku tombol Kembali kustom dan tidak ingin NavHost
Anda menekan tombol Kembali, Anda dapat meneruskan null
ke setPrimaryNavigationFragment()
.
Bagikan data terkait UI antara tujuan dengan ViewModel
Dimulai dengan versi 2.1.0-alpha02, Anda dapat membuat ViewModel
yang dicakup dalam grafik navigasi, yang memungkinkan Anda untuk berbagi data terkait UI antara tujuan grafik. Setiap objek ViewModel
yang dibuat dengan cara ini akan aktif sampai NavHost
dan ViewModelStore
yang terkait dibersihkan atau sampai grafik navigasi muncul dari tumpukan belakang.
Contoh berikut menunjukkan cara mengambil ViewModel
yang dicakup dalam grafik navigasi:
Kotlin
Di Kotlin, Anda dapat menggunakan delegasi properti navGraphViewModels()
untuk mengambil ViewModel
dari dalam tujuan fragmen:
val factory: ViewModelProviderFactory = ... val viewModel: MyViewModel by navGraphViewModels(R.id.my_graph) { factory }
Perhatikan bahwa dalam contoh ini, by navGraphViewModels()
secara otomatis memanggil findNavController()
untuk mengambil NavController
yang terkait.
Java
ViewModelProviderFactory factory = ... ViewModelStoreOwner owner = navController.getViewModelStoreOwner(R.id.my_graph); MyViewModel viewModel = new ViewModelProvider(owner, factory);
Untuk informasi lebih lanjut tentang ViewModel
, lihat Ringkasan ViewModel.