0

我想改变“android:label”Fragment

我尝试运行以下代码来更改标签,但它失败了。

val graph = findNavController().graph
graph.label = "测试"
findNavController().graph = graph
4

3 回答 3

1

根据Navigation UI 文档,NavigationUI 方法(例如setupActionBarWithNavController()方法)依赖于 an OnDestinationChangedListener,每次您navigate()到达新目的地时都会调用它。这就是为什么标签不会立即更改的原因 - 它仅在您导航到新目的地时才会更新。

该文档确实解释了顶部应用栏

您附加到目的地的标签可以使用标签中的格式从提供给目的地的参数中自动填充{argName}

这允许您将用于标签(例如R.string.destination_label)的字符串更新为以下形式

<string name="destination_label">You are on {destination}</string>

通过在您的目的地上使用相同的参数,您的标题将自动填充正确的信息。

当然,如果您没有可以提前确定的参数,那么您可能希望完全避免android:label在您的目的地上设置一个,而是从该目的地手动更新您的操作栏的标题等。

于 2019-06-18T03:51:25.390 回答
0
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
        destination.setLabel("Bruno is here");

    });
于 2021-03-03T22:01:02.753 回答
0

只需在托管活动 onCreate() 函数中添加以下代码行。

  1. 获取 NavController 的引用,这里我使用 NavHostFragment 来获取 NavController 的引用,你也可以使用其他方式。
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_container);

NavController navController= navHostFragment.getNavController();
  1. 将 addOnDestinationChangedListener 添加到 NavController 并根据参数中收到的数据项更改标签。
navController.addOnDestinationChangedListener( new NavController.OnDestinationChangedListener() {
                @Override
                public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
                    if (destination.getId() == R.id.fragmentID) {
                        if (arguments != null) {
                            DataItem item = FragmentArgs.fromBundle(arguments).getItem();
                            if (item != null)
                                destination.setLabel(getString(R.string.your_label));
                            else
                                destination.setLabel(getString(R.string.other_label));
                        }
                    }

                }
            });
于 2021-05-12T03:55:16.383 回答