如何在片段中而不是在活动中使用 NavController(在片段中带有 NavHost)?
Posted
技术标签:
【中文标题】如何在片段中而不是在活动中使用 NavController(在片段中带有 NavHost)?【英文标题】:How to use NavController (with a NavHost in a fragment) in a fragment rather than in an activity? 【发布时间】:2019-06-17 19:09:19 【问题描述】:我有一个 MainActivity,其中我有一个带有 mainFragment 的 navController,用作 4 个片段(Feed、Notifications、Profile 和 Help)的 NavHost。我的问题是这些片段中的第三个,我需要它还有自己的 navController 和 3 个选项(活动、成就和编辑配置文件)。我尝试创建与我在 MainActivity 中创建的相同的方式,在 Profile 片段中使用 NavHost 的片段,但 android 不接受这种方式,我在 Google 上找不到任何示例。有人知道怎么解决吗?
https://developer.android.com/reference/kotlin/androidx/navigation/NavController
它遵循我在MainActivity中实现的方式,这个“bottomNavigationView”是在片段之间传递的菜单:
navController = Navigation.findNavController(this, R.id.main_fragment);
navController.addOnDestinationChangedListener((controller, destination, arguments) ->
navDestination = destination;
switch (destination.getId())
case R.id.feed:
bottomNavigationView.setCurrentActiveItem(0);
break;
case R.id.alerts:
bottomNavigationView.setCurrentActiveItem(1);
break;
case R.id.profile:
bottomNavigationView.setCurrentActiveItem(2);
break;
case R.id.help:
bottomNavigationView.setCurrentActiveItem(3);
break;
);
bottomNavigationView.setNavigationChangeListener((view, position) ->
switch (position)
case 0:
if (navDestination.getId() != R.id.feed)
titleHeaderMain.setText(R.string.publicacao);
titleHeaderMain.setGravity(View.TEXT_ALIGNMENT_CENTER);
navController.navigate(R.id.feed);
break;
case 1:
if (navDestination.getId() != R.id.alerts)
titleHeaderMain.setText(R.string.notificacoes);
navController.navigate(R.id.alerts);
break;
case 2:
if (navDestination.getId() != R.id.profile)
titleHeaderMain.setText(R.string.perfil);
navController.navigate(R.id.profile);
break;
case 3:
if (navDestination.getId() != R.id.help)
titleHeaderMain.setText(R.string.ajudar);
navController.navigate(R.id.help);
break;
);
【问题讨论】:
那么您到底遇到了什么问题?您能否指出您遇到问题的线路以及错误消息是什么?您当然可以像任何其他 Fragment 一样将 NavHostFragment 嵌套在 Fragment 中作为子 Fragment。 【参考方案1】:您必须重新考虑您的导航路径。我有同样的问题,但它没有用。我不得不对其进行返工。
我只将底部导航放在活动中,并根据目的地隐藏或显示它。
【讨论】:
请详细说明。为什么 OP 必须重新考虑他的导航以及您究竟是如何解决这个问题的。请举个例子。以上是关于如何在片段中而不是在活动中使用 NavController(在片段中带有 NavHost)?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 在变量中而不是在当前 DOM 中选择内容?
片段中的recyclerview的“RecyclerView:没有附加适配器;跳过布局”[重复]