简体   繁体   中英

Clicking on hamburger icon sometimes does not open navigation drawer in android

when click on hamburger icon sometimes not open navigation drawer but sometime work perfectlySometime issue with click on hamburger icon.Help me solve out this issue.My code is here :-

activity_main.xml :-

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
     android:fitsSystemWindows="true"
    app:itemBackground="@drawable/drawer_item"
    android:visibility="gone"
    app:headerLayout="@layout/nav_header_main2"
    app:itemTextColor="@color/colorWhite"
    app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>

My Kotlin File :-

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.navFormula -> {

        }
    }

    drawer_layout.closeDrawer(GravityCompat.START)
    return true
}

Check if your nav is correctly instantiated as fallow

...
setSupportActionBar(toolbar)

val toggle = ActionBarDrawerToggle(
        this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
...

I suggest you to create your own toolbar on your xml, on your activity_main.xml

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="@color/colorPrimary"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <RelativeLayout
                android:id="@+id/menu_container"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:paddingRight="@dimen/default_margin">

                <ImageView
                    android:id="@+id/menuIcon"
                    android:layout_width="30dp"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:contentDescription="@string/app_name"
                    android:src="@drawable/ic_menu_black_24dp"/>

            </RelativeLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:textColor="@android:color/white"
                android:textStyle="bold"
                android:textAlignment="center"
                android:layout_marginStart="50dp"
                android:id="@+id/toolTitle" />

        </RelativeLayout>

    </android.support.v7.widget.Toolbar>

    </RelativeLayout>


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:itemBackground="@drawable/drawer_item"
        android:visibility="gone"
        app:headerLayout="@layout/nav_header_main2"
        app:itemTextColor="@color/colorWhite"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

Then, on your activity, on create, put :

    //set the custom toolbar as the action bar
    setSupportActionBar(toolbar)

    //set the NavigationItemListener
    navigationView.setNavigationItemSelectedListener { item ->
        item.isChecked = true

        //close drawer when an item is clicked
        drawer.closeDrawers()
        when (item.itemId) {

        }
        false
    }

    //open drawer when the hamburger icon is clicked
    menuIcon.setOnClickListener {
        drawer.openDrawer(nav_view, true)
    }

Use following settings, it would always open Navigation Drawer after clicked Hamburger icon:

override fun onCreate(savedInstanceState: Bundle?) {    
    ...
    // Add Toolbar
    setSupportActionBar(findViewById(R.id.tb_settings))
    getSupportActionBar()!!.setDisplayHomeAsUpEnabled(true)
    getSupportActionBar()!!.setDisplayShowHomeEnabled(true)
    ...
}

override fun onSupportNavigateUp(): Boolean {
    // Open Navigation Bar
    drawer_layout.openDrawer(nav_view, true)

    return true
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM