gpt4 book ai didi

android - 为什么 Navigation Drawer 项目模板 (Studio 3.6.1) 无法在 Android Nougat 上加载正确的 Controller ?

转载 作者:行者123 更新时间:2023-12-04 01:33:16 26 4
gpt4 key购买 nike

问题背景

我只是从项目模板中选择了 Navigation Drawer Template(参见图中突出显示的项目),构建了应用程序并在模拟器 (Android Nougat (v7) API 24) 上运行它。

navigation drawer project template

问题

当我打开菜单并选择另一个项目时,它不会加载新项目(通过 Controller 加载新 fragment )。

问题的更多细节

  1. 应用程序从这里开始...(主页 fragment - 第一张图片)。
  2. 我点击图库菜单项(第二张图片),主页 fragment 仍然显示(见第一张图片)。

home fragment click gallery menu item

我尝试过的

我在另一个运行 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 引用了项目中根本不存在的类:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com