是否可以部分过渡到Android Nav组件

问题描述 投票:0回答:1

我正在尝试了解是否有可能按活动重构应用程序以使用新的导航组件。我可以看到它确实支持多种活动设计,但是仅通过为每个活动创建一个导航组件即可。这意味着需要一口气在整个应用程序中进行努力,这是不可行的。还有其他办法吗?

我在不使用导航组件的活动和使用导航组件的活动之间导航时遇到了一些问题,例如如何使用导航键从导航活动弹出到先前的非导航活动,甚至在导航栏中显示向上箭头第二个活动的主片段。

我试图手动设置DisplayHomeAsUpEnabled(true)并在清单中声明父活动,但不仅该解决方案似乎非常不准确(如果两个不同的活动可能是父活动,该怎么办?),还强迫我添加SINGLE_TOP属性,以便回到以前的状态,总共似乎太多创可贴肯定会很快击中更多方块...

欢迎提出任何建议。谢谢!

android android-architecture-components android-navigation android-architecture-navigation
1个回答
0
投票

因此,经过大约2天的搜索和尝试后,我发现最好的选择是用导航组件设置工具栏,但也将使用导航图的appbar配置替换为默认的构建器-其中一个为空顶级片段列表。此更改实质上告诉导航组件没有顶层片段,因此始终显示向上箭头(至少这是我的理解)。如果我们在起始目标位置(条目片段)检测到事件,还需要添加向上箭头侦听器以将后堆栈弹出到先前的活动

  • 不需要进行任何清单更改或设置我发现与Nav组件行为相冲突的appbarhome属性。
  • Blockquote

private fun setToolbar() {
    navController = findNavController(R.id.navigation_host_fragment)
    setSupportActionBar(binding.toolbar)
    binding.toolbar.setupWithNavController(
            navController,
            AppBarConfiguration.Builder().build() // Use Builder for empty top level list, up arrow display for home fragment.
    )

    binding.toolbar.setNavigationOnClickListener {
        if (navController.currentDestination?.id == navController.graph.startDestination) {
            onBackPressed()
        } else {
            navController.navigateUp()
        }
    }
}

Blockquote

希望这可以帮助遇到相同困难的其他人过渡到使用新的ish Nav组件!!!

© www.soinside.com 2019 - 2024. All rights reserved.