0

我有一个 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;
        }

    });
4

1 回答 1

0

您必须重新考虑您的导航路径。我有同样的问题,但它没有用。我不得不对其进行返工。

我只将底部导航放在活动中,并根据目的地隐藏或显示它。

于 2020-04-25T13:40:30.027 回答