如何仅在特定片段中启用导航抽屉?

问题描述 投票:0回答:2

我想在片段上设置我的导航抽屉菜单。我不希望导航抽屉在我启动我的应用程序时出现。我希望它在我进入另一页(即不是第一页)后显示出来。但问题是,onSupportNavigateUp只能写在MainActivity上,也就是第一页

这是我的 MainActivity.kt :

class MainActivity : AppCompatActivity() {
    private lateinit var drawerLayout: DrawerLayout
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        @Suppress("UNUSED_VARIABLE")

        val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
        drawerLayout = binding.drawerLayout

        val navController = this.findNavController(R.id.myNavHostFragment)
        NavigationUI.setupActionBarWithNavController(this,navController, drawerLayout)
        NavigationUI.setupWithNavController(binding.navView, navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.myNavHostFragment)
        return NavigationUI.navigateUp(navController, drawerLayout)
    }
}

这是我的 activity_main.xml `

<androidx.drawerlayout.widget.DrawerLayout
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <fragment
            android:id="@+id/myNavHostFragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:navGraph="@navigation/navigation"
            app:defaultNavHost="true"
            />
    </LinearLayout>
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/navdrawer_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
`

它需要

fragment_title.xml
显示,并通过使用片段标签和NavHostFragment将其用于
activity_main.xml
显示。

我还有另一个片段叫做

fragment_home.xml
HomeFragment.kt
类。

我不知道的是,当我在标题片段上时如何不显示导航抽屉并在我在主页片段上时开始显示导航抽屉?

android kotlin android-fragments navigation-drawer android-navigation
2个回答
1
投票

下面的代码将设置 TitleFragment 中的

navView
可见性并在其他目的地设置可见:

        navController.addOnDestinationChangedListener { _, destination, _ ->
            if (destination.id == R.id.titleFragment) {
                navView.visibility = View.GONE
            } else {
                navView.visibility = View.VISIBLE
            }
        }

0
投票

您可以使用

setDrawerLockMode
功能和
drawerLayout
在某些片段锁定抽屉并在其他片段解锁。

navController.addOnDestinationChangedListener { _, nd, _ ->
    if(nd.id == R.id.titleFragment){
        // Unlock drawer at title fragment
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
    }else{
        // Lock drawer closed at other fragments
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
    }
}

这里可以修改条件,在某些片段上锁定关闭,在某些片段上无法打开和解锁。

© www.soinside.com 2019 - 2024. All rights reserved.