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

标签 android android-studio android-project-template

问题背景

我只是从项目模板中选择了 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/

相关文章:

java - 在 Android (Java) 中将所选图像转换为 Base64 字符串

android - java.io.IOException : Cannot download No space left on device

java - 从倒计时获取变量并将其设置到 TextView

android - 在 Android Studio 项目上添加文本文件的位置以放置不会部署在 APK 上的内部注释

android - 暂停时更新 MediaPlayer 开始位置

java - 运行时异常 : Unabel to instantiate activity ComponentInfo and NullPointerException

android - 如何在可搜索微调器中使用 SearchView.OnQueryTextListener()?

android - 使用发布构建类型构建 android studio 签名的 apk

Android Studio 为新项目创建项目模板