简体   繁体   English

重写 onNavigationItemSelected 停止导航到 drawerLayout 中项目单击的片段

[英]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.

相关问题 android DrawerLayout导航无需单击DrawerLayout项即可重新加载片段 - android DrawerLayout navigation Fragment reload without click on DrawerLayout item 使用onNavigationItemSelected()在导航抽屉中切换片段 - Switching Fragments in navigation drawer using onNavigationItemSelected() 在导航抽屉项目上切换片段,请单击 - Switching fragments on Navigation Drawer item click onNavigationItemSelected 不适用于 DrawerLayout - onNavigationItemSelected not work on DrawerLayout OnNavigationItemSelected() 没有打开所需的片段 - OnNavigationItemSelected() not opening the required fragments 保存arrayList而不是覆盖每个项目,而不单击导航抽屉中的? - Saving arrayList instead of overriding of each item click in Navigation Drawer? 在新的导航抽屉活动模板中使用onNavigationItemSelected在片段之间切换(Android Studio 1.4以后) - Switch between Fragments with onNavigationItemSelected in new Navigation Drawer Activity template (Android Studio 1.4 onward) Android DrawerLayout - 单击项目时速度太慢 - Android DrawerLayout - too slow upon item click onNavigationItemSelected 不适用于导航抽屉 - onNavigationItemSelected is not working on Navigation Drawer 未调用 Android 导航 onNavigationItemSelected - Android navigation onNavigationItemSelected not called
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM