How to set NavigationView with AppBarConfiguration?
我是导航的新手,导航组件中的起始目标位置与我的最高目标位置不同,因此我使用
这是他们的主要活动代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.databinding.DataBindingUtil import androidx.drawerlayout.widget.DrawerLayout import androidx.navigation.NavController import androidx.navigation.NavDestination import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.NavigationUI import com.example.android.pass.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var drawerLayout: DrawerLayout private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var binding: ActivityMainBinding private lateinit var navController: NavController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setTheme(R.style.AppTheme) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) val toolbar= binding.toolbar drawerLayout = binding.drawerLayout navController = this.findNavController(R.id.myNavHostFragment) setSupportActionBar(toolbar) navController .addOnDestinationChangedListener { nc: NavController, nd: NavDestination, args: Bundle? -> if (nd.id == R.id.accountListFragment) { drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) } else { drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) } } val topLevelDestinations = setOf(R.id.accountListFragment) appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations) .setDrawerLayout(drawerLayout) .build() NavigationUI.setupWithNavController(binding.navView, navController) NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration) } override fun onSupportNavigateUp(): Boolean { return NavigationUI.navigateUp(navController,appBarConfiguration) } } |
这是我的抽屉菜单,其中有两个ID与我要浏览的片段具有相同ID的项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <item android:id="@+id/aboutFragment" android:icon="@drawable/question" android:title="About" /> <item android:id="@+id/settingsFragment" android:icon="@drawable/settings" android:title="settings" /> </menu> |
我找到了答案,而不是使用以下代码将
我在主要活动中使用了以下代码:
1 2 3 4 5 6 7 8 9 10 11 | binding.navView.setNavigationItemSelectedListener(this) override fun onNavigationItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.about_item -> navController.navigate(R.id.aboutFramgent) R.id.settings_item -> navController.navigate(R.id.settingsFramgent) } return true } |
使用此:
1 2 | AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); |
而不是:
1 | appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations) |