如果使用导航组件在每个片段中设置工具栏,如何删除顶层片段工具栏中的后退按钮?

时间:2020-04-08 04:30:50

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

我尝试阅读this,但是我的问题有点不同。

我需要一些不同的工具栏,因此根据here的文档,我需要将工具栏设置在我的每个片段中,而不是在MainActivity中。

所以我在片段的每个xml中设置工具栏。然后在每个片段中,我使用此代码来设置工具栏

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val toolbar = view.findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbar3)

        val navHostFragment = NavHostFragment.findNavController(this);
        NavigationUI.setupWithNavController(toolbar, navHostFragment)


    }

但是我的底部导航视图的顶层片段中有后退按钮,如下图所示。如果我从片段而不是从MainActivity设置工具栏,我会困惑如何传递appBarConfiguration

enter image description here

2 个答案:

答案 0 :(得分:1)

我终于得到了答案。我需要在每个顶级片段中设置appBarConfiguration

所以在我的HomeFragmentSearchFragment中,您应该这样

val toolbar = view.findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbar2)
val appBarConfiguration = AppBarConfiguration(setOf(
    R.id.destination_home,
    R.id.destination_search)
)

val navHostFragment = NavHostFragment.findNavController(this);
NavigationUI.setupWithNavController(toolbar, navHostFragment,appBarConfiguration)

要使用AppBarConfiguration类,您需要navigation-ui-ktx工件,并且在gradle应用中,还需要使用此编译选项和kotlin选项

android {


    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }

}

答案 1 :(得分:0)

您应该尝试使用“自定义操作栏”,而不是默认的“操作栏”,并且您不希望在哪个片段中回退按钮。只需设置“可见性”即可。