首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓-没有NavGraph的startDestination

安卓-没有NavGraph的startDestination
EN

Stack Overflow用户
提问于 2022-04-18 14:32:13
回答 2查看 51关注 0票数 0

没有navGraph怎么可能没有startDestination

我有一个BottomSheet片段容器。当触发某些事件时,我希望展开这个BottomSheet并将一个片段加载到它的片段容器中。在触发其中一个事件之前,我不希望片段容器加载任何片段。我希望它是空的。

但是,如果不向startDestination提供有效的navGraph,则应用程序会崩溃,例外情况如下:

代码语言:javascript
复制
IllegalStateException: no start destination defined

这个是可能的吗?处理这件事最好的方法是什么?

编辑

我知道我可以通过编程方式提供一个startDestination。但这并不是一种优雅的做法。它引入了杂乱代码,当第一个片段加载需要发生时,需要执行这些代码,而当该片段需要参数时,则会变得更糟。

我们的目标是跳过提供一个startDestination

EN

回答 2

Stack Overflow用户

发布于 2022-04-18 14:55:43

第一个解决方案:在图中创建空片段并将其设置为startDestination

第二种解决方案:等待事件触发,并使用startDestination参数打开startDestination。读取BottomSheet的参数并更改开始目标

代码语言:javascript
复制
navGraph.setStartDestination(R.id.fragment2)
票数 0
EN

Stack Overflow用户

发布于 2022-04-18 15:19:01

在导航图中设置默认的startDestination。例如,对我来说,它是我通常想要开始的目的地(R.id.trips_fragment)

然后,在我的活动onCreate中:

代码语言:javascript
复制
private fun setupMainNavigationGraph() {
    val navController = findNavHostFragment().navController
    val mainNavigationGraph = navController.navInflater.inflate(R.navigation.main_graph)
    mainNavigationGraph.setStartDestination(intent.getIntExtra(START_DESTINATION_INTENT_EXTRA, R.id.trips_fragment))
    navController.graph = mainNavigationGraph
}

这样,如果我想使用自定义的开始目的地,我会将开始目的地ID作为活动的意图传递给活动,然后用覆盖的开始目的地加载图表。

注意,这里的行

代码语言:javascript
复制
intent.getIntExtra(START_DESTINATION_INTENT_EXTRA, R.id.trips_fragment)

R.id.trips_fragment是默认值。

我将此用于集成测试,以覆盖开始目的地。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71913164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档