[英]overriding onNavigationItemSelected stops navigation to fragments on item click in drawerLayout
overriding onNavigationItemSelected stops navigation component functionality of opening fragments on item click, instead it calls onNavigationItemSelected and nothing else happens.覆盖 onNavigationItemSelected 会停止在项目单击时打开片段的导航组件功能,而是调用 onNavigationItemSelected 并且不会发生其他任何事情。
navigation view setup called in on create创建时调用的导航视图设置
private fun setupNavigationDrawer(){
NavigationUI.setupWithNavController(binding.navigationView,navHostFragment.findNavController())
binding.navigationView.setNavigationItemSelectedListener(this)
}
activity活动
class MainActivity : AppCompatActivity(),NavigationView.OnNavigationItemSelectedListener
onNavigationItemSelected onNavigationItemSelected
override fun onNavigationItemSelected(item: MenuItem): Boolean {
if(binding.mainActivityRootView.isDrawerOpen(GravityCompat.END)){
binding.mainActivityRootView.closeDrawer(GravityCompat.END)
}
else if(binding.mainActivityRootView.isDrawerOpen(GravityCompat.START)){
binding.mainActivityRootView.closeDrawer(GravityCompat.START)
}
return true
}
Navigation view xml导航查看 xml
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:menu="@menu/menu_home_navigation_drawer"
android:paddingStart="15dp"
android:paddingEnd="15dp"
app:headerLayout="@layout/layout_navigation_drawer_header"
app:itemIconTint="@color/lipstick"
android:layout_gravity="end"
app:drawerLayoutCornerSize="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="bottom"
android:layout_marginBottom="40dp"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_main_blue"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/lipstick" />
<TextView
android:id="@+id/textView41"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/montserratmedium"
android:text="Version IMPLEMENT"
android:textColor="@color/pinkish_grey"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.navigation.NavigationView>
i have set menu item id as navigation fragment id and it works without the onNavigationItemSelected being set i also have navigation view below fragment container in xml我已将菜单项 ID 设置为导航片段 ID,它在没有设置 onNavigationItemSelected 的情况下工作我还在 xml 中的片段容器下方有导航视图
i tried to我尝试过了
-change return value onNavigationItemSelected -setting up onNavigationItemSelected listener before setupWithNavController which results in the listener not getting called at all -更改返回值 onNavigationItemSelected -在 setupWithNavController 之前设置 onNavigationItemSelected 侦听器,这导致侦听器根本没有被调用
In the end i solved it by manually opening fragments最后我通过手动打开片段解决了它
from从
override fun onNavigationItemSelected(item: MenuItem): Boolean {
if(binding.mainActivityRootView.isDrawerOpen(GravityCompat.END)){
binding.mainActivityRootView.closeDrawer(GravityCompat.END)
}
else if(binding.mainActivityRootView.isDrawerOpen(GravityCompat.START)){
binding.mainActivityRootView.closeDrawer(GravityCompat.START)
}
return true
}
to到
override fun onNavigationItemSelected(item: MenuItem): Boolean {
if(binding.mainActivityRootView.isDrawerOpen(GravityCompat.END)){
binding.mainActivityRootView.closeDrawer(GravityCompat.END)
}
else if(binding.mainActivityRootView.isDrawerOpen(GravityCompat.START)){
binding.mainActivityRootView.closeDrawer(GravityCompat.START)
}
when(item.itemId){
else ->{
NavigationUI.onNavDestinationSelected(item,navHostFragment.findNavController())
}
}
return true
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.