android - 如何使用 AppBarConfiguration 设置 NavigationView?
问题描述
我是导航新手,我在导航组件中的起始目的地与我的顶级目的地不同,所以我曾经AppBarConfiguration
使用自定义的顶级目的地,但是当我想设置 NavigationView 时,navController
使用NavigationUI.setupWithNavController(binding.navView, navController)
用于设置带有抽屉项目的导航组件,但是当我按下导航抽屉中的项目时,应用程序无法识别我的自定义顶部目的地,导航到不同的片段并按下返回按钮以导航回顶部目的地。它向我显示了起始目的地,但我想查看自定义顶部目的地,这是它们的主要活动代码:
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 的项目以及我要导航的片段:
<?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>
解决方案
用这个 :
AppBarConfiguration appBarConfiguration =
new AppBarConfiguration.Builder(navController.getGraph()).build();
代替 :
appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations)
推荐阅读
- google-api - Alexa 技能帐户与 Google API 凭据链接,刷新令牌时出现问题
- c - 将 char 分配给 char - 意外行为
- canvas - 缩放画布时 EaselJS 对象位置发生变化
- image - 没有从 react-native 中的嵌套 json 获取数据
- c++ - cURL Windows 构建配置的说明
- pandas - 如何使用 pandas.dataframe() 函数转换 Python 的嵌套 dic 作为响应
- cordova - PayTm 插件需要一个参数:MERCHANT_ID、INDUSTRY_TYPE_ID、WEBSITE
- c++ - 如何在 C++ 中使用 UAC-shield 创建菜单项?
- vba - 如何知道 SAP 上的表 ID,使用 VBA 从 SAP 读取数据
- json - 多个 TagSet 节点在 aws cli 中不起作用