overriding onNavigationItemSelected stops navigation to fragments on item click in drawerLayout

67 Views Asked by At

overriding onNavigationItemSelected stops navigation component functionality of opening fragments on item click, instead it calls onNavigationItemSelected and nothing else happens.

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

    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

<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

i tried to

-change return value onNavigationItemSelected -setting up onNavigationItemSelected listener before setupWithNavController which results in the listener not getting called at all

1

There are 1 best solutions below

0
Abed Sako On BEST ANSWER

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
}