@@ -18,59 +18,43 @@ package com.example.android.navigationadvancedsample
1818
1919import android.os.Bundle
2020import androidx.appcompat.app.AppCompatActivity
21- import androidx.lifecycle.LiveData
22- import androidx.lifecycle.Observer
2321import androidx.navigation.NavController
22+ import androidx.navigation.fragment.NavHostFragment
23+ import androidx.navigation.ui.AppBarConfiguration
24+ import androidx.navigation.ui.navigateUp
2425import androidx.navigation.ui.setupActionBarWithNavController
26+ import androidx.navigation.ui.setupWithNavController
2527import com.google.android.material.bottomnavigation.BottomNavigationView
2628
2729/* *
2830 * An activity that inflates a layout that has a [BottomNavigationView].
2931 */
3032class MainActivity : AppCompatActivity () {
3133
32- private var currentNavController: LiveData <NavController >? = null
34+ private lateinit var navController: NavController
35+ private lateinit var appBarConfiguration: AppBarConfiguration
3336
3437 override fun onCreate (savedInstanceState : Bundle ? ) {
3538 super .onCreate(savedInstanceState)
3639 setContentView(R .layout.activity_main)
37- if (savedInstanceState == null ) {
38- setupBottomNavigationBar()
39- } // Else, need to wait for onRestoreInstanceState
40- }
4140
42- override fun onRestoreInstanceState (savedInstanceState : Bundle ? ) {
43- super .onRestoreInstanceState(savedInstanceState)
44- // Now that BottomNavigationBar has restored its instance state
45- // and its selectedItemId, we can proceed with setting up the
46- // BottomNavigationBar with Navigation
47- setupBottomNavigationBar()
48- }
41+ val navHostFragment = supportFragmentManager.findFragmentById(
42+ R .id.nav_host_container
43+ ) as NavHostFragment
44+ navController = navHostFragment.navController
4945
50- /* *
51- * Called on first creation and when restoring state.
52- */
53- private fun setupBottomNavigationBar () {
46+ // Setup the bottom navigation view with navController
5447 val bottomNavigationView = findViewById<BottomNavigationView >(R .id.bottom_nav)
48+ bottomNavigationView.setupWithNavController(navController)
5549
56- val navGraphIds = listOf (R .navigation.home, R .navigation.list, R .navigation.form)
57-
58- // Setup the bottom navigation view with a list of navigation graphs
59- val controller = bottomNavigationView.setupWithNavController(
60- navGraphIds = navGraphIds,
61- fragmentManager = supportFragmentManager,
62- containerId = R .id.nav_host_container,
63- intent = intent
50+ // Setup the ActionBar with navController and 3 top level destinations
51+ appBarConfiguration = AppBarConfiguration (
52+ setOf (R .id.titleScreen, R .id.leaderboard, R .id.register)
6453 )
65-
66- // Whenever the selected controller changes, setup the action bar.
67- controller.observe(this , Observer { navController ->
68- setupActionBarWithNavController(navController)
69- })
70- currentNavController = controller
54+ setupActionBarWithNavController(navController, appBarConfiguration)
7155 }
7256
7357 override fun onSupportNavigateUp (): Boolean {
74- return currentNavController?.value?. navigateUp() ? : false
58+ return navController. navigateUp(appBarConfiguration)
7559 }
7660}
0 commit comments