问题背景
我只是从项目模板中选择了 Navigation Drawer Template(参见图中突出显示的项目),构建了应用程序并在模拟器 (Android Nougat (v7) API 24) 上运行它。
问题
当我打开菜单并选择另一个项目时,它不会加载新项目(通过 Controller 加载新 fragment )。
问题的更多细节
- 应用程序从这里开始...(主页 fragment - 第一张图片)。
- 我点击图库菜单项(第二张图片),主页 fragment 仍然显示(见第一张图片)。
我尝试过的
我在另一个运行 Android Pie 的模拟器上运行了这个相同的项目,它按预期工作——当我点击画廊菜单项时,画廊 fragment 加载,我看到“This is Gallery fragment”。
我尝试过的其他事情
我也打开了 logcat,然后单击菜单项,但没有显示任何内容,即使我已关闭所有过滤器也是如此。
相关模板代码
onCreate 中 MainActivity 中的模板代码(加载 fragment 和 Controller ,初始化所有内容)如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
val fab: FloatingActionButton = findViewById(R.id.fab)
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
// ###########################################################
// #### MY NOTES -- This is the relevant code ################
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
appBarConfiguration = AppBarConfiguration(setOf(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow), drawerLayout)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
我可以登录什么/在哪里来确定发生了什么?
你能告诉我为什么会这样吗?
或者,您能给我一个想法,我可以在其中放置一些日志记录语句来确定正在触发的内容,以便我可以判断出什么是失败的吗?
更新 - 附加信息
模板肯定有问题,因为 mobile_navigation.xml 引用了项目中根本不存在的类:
即使此项目中不存在 app.actionmobile.navdraw.ui.home.HomeSecondFragment
,该应用仍会构建并运行。
唔....
不确定这怎么可能。
仅供引用 - 这是由项目模板添加的,不是我添加的。
我试过的其他东西 我将更改后的 mobile_navigation.xml 顶部设置为:
app:startDestination="@+id/nav_home"
到
app:startDestination="@+id/nav_gallery"
测试了画廊 fragment 是否会作为第一个 fragment 加载并且没有问题。
重述问题
我再次遇到的问题是菜单项的选择不会在牛轧糖上加载新 fragment ,但会在派上加载。 不确定平台如何解决这个问题???
最佳答案
您可能是对的,一些旧的依赖项引用可能会导致 NavigationUI 的一般实现出现问题和冲突。不幸的是,我通过以下方式在新创建的项目中遇到了同样的问题:
Android Studio 4.0.1
构建 #AI-193.6911.18.40.6626763,构建于 2020 年 6 月 25 日
运行时版本:1.8.0_242-release-1644-b01 amd64
我终于发现,除了您的建议之外,我还必须在 MainActivity 的 onCreate 方法结束之前添加以下行:
val navView: NavigationView = findViewById(R.id.nav_view) as NavigationView
navView.setupWithNavController(navController)
...
// Extra line:
navView.bringToFront()
关于android - 为什么 Navigation Drawer 项目模板 (Studio 3.6.1) 无法在 Android Nougat 上加载正确的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60459214/