根据github示例,我正在尝试实现一个带有多个后堆栈的多个导航控制器
。然而,该示例对每个选项卡使用不同的导航图,这使事情变得简单。在我的情况下,我需要对所有选项卡使用相同的导航图,但起始目的地不同于导航图中设置的“起始目的地”。
到目前为止,我已经设法修改了NavigationExtensions
文件,以便为所有选项卡实现单个导航图,并且我得到了多个NavController
,它们有自己的后台堆栈,但我不知道如何在不同的目的地启动导航图。
我试过使用。获取导航控制器时导航
,但由于它尚未连接,因此无法工作。关于如何实现这一点有什么想法吗?非常感谢。
我写了两个扩展来完成这项工作。第一个用于更改当前节点中的目标。第二种方法用于多次遍历嵌套图
_main_graph
|
|_nested_graph_1
|
|_nested_graph_2
|
|_nested_graph_3
|
|_nested_graph_4
|
|_change this destination!!!!
fun NavController.changeNodeDestination(nodeId: Int, destinationId: Int): NavController {
val graph = graph.findNode(nodeId) as NavGraph
graph.startDestination = destinationId
return this
}
fun NavController.changeNodeDestination(vararg nodeIds: Int, destinationId: Int): NavController {
var currentNode = graph
nodeIds.forEachIndexed { index, i ->
currentNode = currentNode.findNode(nodeIds[index]) as NavGraph
}
currentNode.startDestination = destinationId
return this
}
用法:
findNavController().changeNodeDestination(
R.id.navigation_login,
R.id.nav_change_password, // GO two levels inside nested graphs
destinationId = startDestination
).navigate(navID, bundle)
我们有一个要求,即显示的开始屏幕将取决于用户是否登录,我们所做的是:
>
XML
上删除app:startDestination(如果存在)NavController navController = Navigation.findNavController(this, R.id.your_nav_hostfragment);
NavGraph navGraph = navController.getNavInflater().inflate(R.navigation.your_navigation_xml);
然后,根据您的需求,您可以使用setStartDestation在NavGough上设置开始目的地,然后将NavGough应用到NavController:
if (condition) {
navGraph.setStartDestination(R.id.screen1);
} else {
navGraph.setStartDestination(R.id.screen2);
}
navController.setGraph(navGraph);
前几天,我开始注意到我的应用程序中有一些东西,它非常不一致。有时会发生,有时不会。 我正在使用导航组件来处理应用程序中的导航,我开始注意到,有时,当通过操作栏后退按钮或设备后退按钮弹出后退时,它返回到一个不再是起始目的地(或至少不应该是)的片段。 在我的例子中,应用程序在MainFragment中启动,经过身份验证后移动到DashboardFragment。这是一种非常常见的情况。 应用程序中的导
基本上,我有以下导航图: 我想在到达后立即将导航图中的起点更改为(以防止在按下后退按钮时返回到,就像启动屏幕一样)。 这是我的代码: 但是,显然它不工作,它回到后按后退按钮。 我做错了吗?还有其他解决办法吗?
BottomBar有4个目的地:ScreenA,ScreenB,ScreenC和ScreenD。 在ScreenA上按下按钮(不是底部栏项)时,我想使用参数转到ScreenB。 导航图 底部栏 到目前为止,单击ScreenA上的按钮会将我导航到ScreenB,但参数值始终为0,因为我永远不会传递在lambda中传递的参数。我使用的是compose_version='1.2.0-alpha04'和"
问题内容: 我知道更多视图控制器(导航栏)的存在将UIView按其高度向下推。我也知道这个高度= 44px。我还发现,这种下推保持了。 因此,除了将其设置为常数之外,如何确定此导航栏的高度? 或者,较短的版本,如何确定我的UIView显示在导航栏的顶部? 灯泡开始点亮。不幸的是,如下所述,我还没有发现纠正问题的统一方法。 我相信我的整个问题都围绕着我的自动调整大小掩码。我得出的结论是,无论是否使用
问题内容: 我一直在寻找这种解决方案已有一段时间,但是没有任何解决方案。例如一个解决方案是 此代码将添加带有“停止”图像的按钮。就像这样,还有其他解决方案,例如“搜索,刷新”等。但是 ,如果我想以编程方式在想要的图像上添加按钮,该怎么办? 问题答案: 自定义按钮图片,未设置按钮框: 您可以使用指定的图像和其他属性来初始化新项目。 检查此Apple文档。参考 UIBarButtonItem具有使用按
问题内容: 我正在尝试使用导航栏(“后退”按钮,标题等)和选项卡栏(底部的工具栏)制作一个应用程序。我使用的是子视图,因此不必担心状态栏,导航栏,标签栏的高度等问题。但是我认为这给我带来了麻烦,因为我似乎无法弄清楚如何设置导航栏和标签栏。 这就是我所拥有的。我究竟做错了什么? AppDelegate.h AppDelegate.m ViewController.h ViewController.m