【问题标题】:How to change label attribute of a destination in navigation controller?如何更改导航控制器中目的地的标签属性?
【发布时间】:2019-02-12 09:27:47
【问题描述】:

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

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

这个标签会在我的工具栏中显示为标题。 我可以以编程方式更改该标签吗?因为我想动态设置我的工具栏标题。

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

那么如何解决呢?

【问题讨论】:

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


    【解决方案1】:

    像下面这样在你的活动中做它对我有用:

     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"
    }
    

    【讨论】:

    • 但字符串应该来自我的目的地(片段)。所以我该怎么做 ?我想动态改变它
    • 嗨@Alexa289,有什么消息吗?我也有同样的问题...
    【解决方案2】:

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

    创建一个字符串

    <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)
    
    

    维奥拉,它的作用就像魅力

    【讨论】:

    • 这对我来说效果最好,非常感谢,比每次都覆盖 onStart() 作为接受的答案要好得多
    • 我很高兴它对你有用@masokaya
    【解决方案3】:

    只需删除您nav_graph.xml 中该片段的标签,然后在片段/活动中为您的工具栏设置标题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多