@@ -18,59 +18,43 @@ package com.example.android.navigationadvancedsample
18
18
19
19
import android.os.Bundle
20
20
import androidx.appcompat.app.AppCompatActivity
21
- import androidx.lifecycle.LiveData
22
- import androidx.lifecycle.Observer
23
21
import androidx.navigation.NavController
22
+ import androidx.navigation.fragment.NavHostFragment
23
+ import androidx.navigation.ui.AppBarConfiguration
24
+ import androidx.navigation.ui.navigateUp
24
25
import androidx.navigation.ui.setupActionBarWithNavController
26
+ import androidx.navigation.ui.setupWithNavController
25
27
import com.google.android.material.bottomnavigation.BottomNavigationView
26
28
27
29
/* *
28
30
* An activity that inflates a layout that has a [BottomNavigationView].
29
31
*/
30
32
class MainActivity : AppCompatActivity () {
31
33
32
- private var currentNavController: LiveData <NavController >? = null
34
+ private lateinit var navController: NavController
35
+ private lateinit var appBarConfiguration: AppBarConfiguration
33
36
34
37
override fun onCreate (savedInstanceState : Bundle ? ) {
35
38
super .onCreate(savedInstanceState)
36
39
setContentView(R .layout.activity_main)
37
- if (savedInstanceState == null ) {
38
- setupBottomNavigationBar()
39
- } // Else, need to wait for onRestoreInstanceState
40
- }
41
40
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
49
45
50
- /* *
51
- * Called on first creation and when restoring state.
52
- */
53
- private fun setupBottomNavigationBar () {
46
+ // Setup the bottom navigation view with navController
54
47
val bottomNavigationView = findViewById<BottomNavigationView >(R .id.bottom_nav)
48
+ bottomNavigationView.setupWithNavController(navController)
55
49
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)
64
53
)
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)
71
55
}
72
56
73
57
override fun onSupportNavigateUp (): Boolean {
74
- return currentNavController?.value?. navigateUp() ? : false
58
+ return navController. navigateUp(appBarConfiguration)
75
59
}
76
60
}
0 commit comments