如何在导航控制器中更改目的地的标签属性?

时间:2019-02-12 09:27:48

标签: android android-jetpack android-architecture-components

我正在尝试在Android中使用导航控制器

enter image description here

如上图所示,我将目的地的label属性设置为“家”。

和此标签,将在我的工具栏中显示为标题。 我可以通过编程方式更改该标签吗?因为我想动态设置工具栏标题。

我尝试使用toolbar.title = "some title here"更改工具栏标题,但是它始终与该标签上的标题重叠。

那么如何解决呢?

3 个答案:

答案 0 :(得分:0)

在您的活动中执行以下操作对我有用:

 setSupportActionBar(toolbar)
    val navController = findNavController(R.id.nav_controller_fragment)
    val appBarConfiguration = AppBarConfiguration(navController.graph)
    setupActionBarWithNavController(navController, appBarConfiguration)


    navController.addOnDestinationChangedListener { controller, destination, arguments ->
        when (destination.id) {
            R.id.mainFragment -> toolbar.title = "ok"
            else -> {
                toolbar.title = "General"
            }
        }
    }

或者如果您想更改片段,请执行以下操作:

 override fun onStart() {
    super.onStart()
    (activity as MainActivity).toolbar.title = "changed"
}

答案 1 :(得分:0)

只需移除<input type="text" id="card_number"> 中该片段的标签,然后在片段/活动中为工具栏设置标题。

答案 2 :(得分:0)

我为此苦苦挣扎,所有解决方案都不适合我。但经过广泛的研究,我发现了下面的解决方案;

创建一个字符串

<string name="my_label">You are on {label}</string>

在您的 nav-graph.xml 文件中。使用上面的字符串作为标签并创建一个参数,它应该与标签具有相同的名称

 <fragment
        android:id="@+id/your_fragment"
        .....
        android:label="@string/my_label">

        <argument
            android:name="label"
            app:argType="string" />

    </fragment>

因此,在您的片段中,您可以像这样传递标签名称;

  val direction = YourFragmentDirections
                .action_to_your_fragment(label = "forum")
  findNavController().navigate(direction)

中提琴,它很有魅力