没有navGraph怎么可能没有startDestination?
我有一个BottomSheet片段容器。当触发某些事件时,我希望展开这个BottomSheet并将一个片段加载到它的片段容器中。在触发其中一个事件之前,我不希望片段容器加载任何片段。我希望它是空的。
但是,如果不向startDestination提供有效的navGraph,则应用程序会崩溃,例外情况如下:
IllegalStateException: no start destination defined这个是可能的吗?处理这件事最好的方法是什么?
编辑
我知道我可以通过编程方式提供一个startDestination。但这并不是一种优雅的做法。它引入了杂乱代码,当第一个片段加载需要发生时,需要执行这些代码,而当该片段需要参数时,则会变得更糟。
我们的目标是跳过提供一个startDestination。
发布于 2022-04-18 14:55:43
第一个解决方案:在图中创建空片段并将其设置为startDestination
第二种解决方案:等待事件触发,并使用startDestination参数打开startDestination。读取BottomSheet的参数并更改开始目标
navGraph.setStartDestination(R.id.fragment2)发布于 2022-04-18 15:19:01
在导航图中设置默认的startDestination。例如,对我来说,它是我通常想要开始的目的地(R.id.trips_fragment)
然后,在我的活动onCreate中:
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作为活动的意图传递给活动,然后用覆盖的开始目的地加载图表。
注意,这里的行
intent.getIntExtra(START_DESTINATION_INTENT_EXTRA, R.id.trips_fragment)R.id.trips_fragment是默认值。
我将此用于集成测试,以覆盖开始目的地。
https://stackoverflow.com/questions/71913164
复制相似问题