我想改变“android:label”Fragment
我尝试运行以下代码来更改标签,但它失败了。
val graph = findNavController().graph
graph.label = "测试"
findNavController().graph = graph
我想改变“android:label”Fragment
我尝试运行以下代码来更改标签,但它失败了。
val graph = findNavController().graph
graph.label = "测试"
findNavController().graph = graph
根据Navigation UI 文档,NavigationUI 方法(例如setupActionBarWithNavController()
方法)依赖于 an OnDestinationChangedListener
,每次您navigate()
到达新目的地时都会调用它。这就是为什么标签不会立即更改的原因 - 它仅在您导航到新目的地时才会更新。
该文档确实解释了顶部应用栏:
您附加到目的地的标签可以使用标签中的格式从提供给目的地的参数中自动填充
{argName}
。
这允许您将用于标签(例如R.string.destination_label
)的字符串更新为以下形式
<string name="destination_label">You are on {destination}</string>
通过在您的目的地上使用相同的参数,您的标题将自动填充正确的信息。
当然,如果您没有可以提前确定的参数,那么您可能希望完全避免android:label
在您的目的地上设置一个,而是从该目的地手动更新您的操作栏的标题等。
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
destination.setLabel("Bruno is here");
});
只需在托管活动 onCreate() 函数中添加以下代码行。
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_container);
NavController navController= navHostFragment.getNavController();
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));
}
}
}
});