android - Clicking hamburger icon on Toolbar does not open Navigation Drawer -


i have simple android.support.v7.widget.toolbar , trying open navigationdrawer pressing "hamburger" icon in top left corner. "hamburger" button visible, , when start pull left see animation on button pressing button not open/close navigationdrawer expect. have followed [google documentation][1] , still not able figure out. sorry confusion, below simplified code attempting use:

public class mainactivity extends appcompatactivity implements     view.onclicklistener,     googleapiclient.connectioncallbacks,     googleapiclient.onconnectionfailedlistener {    @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);       setcontentview(r.layout.activity_main);       toolbar toolbar = (toolbar) findviewbyid(r.id.my_toolbar);     setsupportactionbar(toolbar);     getsupportactionbar().setdisplayhomeasupenabled(true);        toolbar.setnavigationonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             log.d("nick", "button button button..................");         }     });          mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer);         navigationview n = (navigationview) findviewbyid(r.id.nav);         mdrawerlayout.setonclicklistener(new view.onclicklistener(){             @override             public void onclick(view v) {                 log.d("nick", "button button button..................");             }         });          //mdrawerlayout.setdrawerlistener(mdrawertoggle);         n.setnavigationitemselectedlistener(new navigationview.onnavigationitemselectedlistener() {             @override             public boolean onnavigationitemselected(menuitem menuitem) {                 switch (menuitem.getitemid()) {                     ////.......                  }                 mdrawerlayout.closedrawers();  // close drawer                 return true;             }         });  @override public boolean onoptionsitemselected(menuitem item) {      log.d("nick","cwecnewkvneripnviewnfvipewnvipewnvpiewnvpiewnvpiewnvpirwnvprwvpo");     switch (item.getitemid()) {         case android.r.id.home:             mdrawerlayout.opendrawer(gravitycompat.start);  // open drawer             log.d("nick","cwecnewkvneripnviewnfvipewnvipewnvpiewnvpiewnvpiewnvpirwnvprwvpo");             return true;      }            return super.onoptionsitemselected(item);   }  @override public void onconfigurationchanged(configuration newconfig) {     super.onconfigurationchanged(newconfig);     mdrawertoggle.onconfigurationchanged(newconfig); }    @override public boolean oncreateoptionsmenu(menu menu) {     getmenuinflater().inflate(r.menu.drawer, menu);     return true; }   } 

}

and not of log debug statements when running.

this issue have: https://stackoverflow.com/a/26636045/1489990. i've followed , doesn't work.

it understanding setnavigationonclicklistener called when hamburger icon pressed, , focusing efforts event handled because when press button not log statement. let me know if idea incorrect. https://developer.android.com/reference/android/widget/toolbar.html#setnavigationonclicklistener(android.view.view.onclicklistener)

my layouts:

activitymain.xml

<relativelayout xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="fill_parent"     android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/d" android:background="@drawable/home_wall">     <android.support.v7.widget.toolbar     android:id="@+id/my_toolbar"     android:layout_height="wrap_content"     android:layout_width="match_parent"     android:minheight="?attr/actionbarsize"     android:background="?attr/colorprimary"     android:layout_marginbottom="10dp"     app:theme="@style/themeoverlay.appcompat.dark.actionbar"     android:layout_margintop="25dp"      xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto" />    <android.support.v4.widget.drawerlayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:id="@+id/drawer"      android:layout_height="match_parent"     android:fitssystemwindows="true">        <imageview         android:layout_width="fill_parent"         android:layout_height="200dp"         android:id="@+id/imageview"         android:src="@drawable/trans2"         android:layout_alignparenttop="true"         android:layout_margintop="10dp"         android:layout_marginleft="5dp"         android:layout_marginright="5dp"         android:paddingbottom="300dp" />      <relativelayout         android:orientation="vertical"         android:layout_width="fill_parent"         android:layout_height="fill_parent"         android:id="@+id/d8"         android:layout_alignparenttop="true"         android:layout_alignleft="@+id/imageview"         android:layout_alignstart="@+id/imageview"         android:paddingtop="0dp">          <button             android:layout_width="75dp"             android:layout_height="50dp"             android:text="gallery"             android:id="@+id/save_button"             android:background="#dd2c00" android:textcolor="#fff"             android:layout_below="@+id/purchases"             android:layout_torightof="@+id/start_button"             android:layout_toendof="@+id/start_button" />         <button             android:layout_width="125dp"             android:layout_height="50dp"             android:text="store"             android:id="@+id/purchases"             android:background="#ff6e40" android:textcolor="#fff"             android:layout_above="@+id/instructions_button6"             android:layout_toleftof="@+id/start_button"             android:layout_tostartof="@+id/start_button"             android:layout_marginbottom="98dp" />         <button             android:layout_width="75dp"             android:layout_height="50dp"             android:text="help"             android:id="@+id/instructions_button6"             android:background="#dd2c00" android:textcolor="#fff"             android:layout_alignparentbottom="true"             android:layout_toleftof="@+id/start_button"             android:layout_tostartof="@+id/start_button"             android:layout_marginleft="5dp"             android:layout_marginbottom="10dp" />         <button             android:layout_width="75dp"             android:layout_height="300dp"             android:text="start"             android:id="@+id/start_button"             android:background="#ff3d00"             android:textcolor="#fff"             android:layout_alignparentbottom="true"             android:layout_centerhorizontal="true"             android:layout_marginbottom="10dp" />         <button             android:layout_width="125dp"             android:layout_height="50dp"             android:text="achievements"             android:id="@+id/scores"             android:background="#ff6e40" android:textcolor="#fff"             android:layout_aligntop="@+id/purchases"             android:layout_torightof="@+id/start_button"             android:layout_toendof="@+id/start_button" />         <textview             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="welcome quiz!"             android:id="@+id/textview"             android:textcolor="#fff"             android:textsize="20dp"             android:layout_alignparenttop="true"             android:layout_centerhorizontal="true"             android:layout_margintop="70dp" />           <!-- sign-in button -->         <com.google.android.gms.common.signinbutton             android:id="@+id/sign_in_button"             android:layout_width="110dp"             android:layout_height="50dp"             android:layout_above="@+id/start_button"             android:layout_centerhorizontal="true"             android:visibility="visible" />          <!-- sign-out button -->         <button             android:id="@+id/sign_out_button"             android:layout_width="125dp"             android:layout_height="wrap_content"             android:text="sign out"             android:visibility="invisible"             android:background="#dd4b39"             android:textcolor="#fff"             android:layout_aligntop="@+id/sign_in_button"             android:layout_centerhorizontal="true"             android:layout_margintop="160dp" />      </relativelayout>      <android.support.design.widget.navigationview         android:layout_width="wrap_content"         android:layout_height="match_parent"         android:layout_gravity="start"         android:background="#fff"         android:id="@+id/nav"          app:headerlayout="@layout/drawer_header"         app:menu="@menu/drawer"/> </android.support.v4.widget.drawerlayout> 

drawer.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_menu" xmlns:app="http://schemas.android.com/apk/res-auto">  <item android:title="google play games"      android:icon="@drawable/ic_local_airport_white_48dp">     <menu>         <item             android:id="@+id/sign_in_drawer"              android:icon="@drawable/games_controller_grey"             android:title="sign in" />         <item             android:id="@+id/ach"             android:icon="@drawable/games_achievements"             android:title="achievements" />     </menu> </item>  <item android:title="start quiz"     android:icon="@drawable/ic_local_airport_white_48dp">     <menu>         <item             android:id="@+id/quizstart25"              android:icon="@drawable/ic_local_airport_white_48dp"             android:title="25 questions" />         <item             android:id="@+id/quizstart10"             android:icon="@drawable/ic_local_airport_white_48dp"             android:title="10 questions" />     </menu> </item>  <group     android:checkablebehavior="single">     <item         android:id="@+id/gallery"          android:icon="@drawable/ic_photo_library_white_48dp"         android:title="gallery" />     <item         android:id="@+id/stats"         android:icon="@drawable/ic_toc_white_48dp"         android:title="statistics" />     <item         android:id="@+id/store"         android:icon="@drawable/ic_shop_white_48dp"         android:title="store" />     <item         android:id="@+id/settings"         android:icon="@drawable/ic_settings_white_48dp"         android:title="settings" />     <item         android:id="@+id/about"         android:icon="@drawable/ic_info_white_48dp"         android:title="about" />  </group>  <item android:title="support">     <menu>         <item             android:id="@+id/help_drawer"             android:icon="@drawable/ic_help_white_48dp"             android:title="help" />         <item             android:id="@+id/report"             android:icon="@drawable/ic_report_problem_white_48dp"             android:title="contact developer" />         <item             android:id="@+id/gpluscommunity"             android:icon="@drawable/btn_g_white_normal"             android:title="google+ community" />      </menu> </item> 

see answer similar post.

basically, skip actionbardrawertoggle if don't need other things (like callbacks). can remove code , implement open/close drawer behavior, this:

@override public boolean onoptionsitemselected(menuitem item) {     switch (item.getitemid()) {        case android.r.id.home:             mdrawerlayout.opendrawer(gravitycompat.start);  // open drawer             return true;         ....     }     return super.onoptionsitemselected(item); } 

the code segment above works whether or not you're using navigationview. if using navigation view, in navigationview click listener:

navigationview.setnavigationitemselectedlistener(     new navigationview.onnavigationitemselectedlistener() {         @override         public boolean onnavigationitemselected(menuitem menuitem) {             // handle menu item clicks here.             drawerlayout.closedrawers();  // close drawer             return true;         }     }); 

update:

also, make sure activity extending appcompatactivity (and not actionbaractivity). see my answer here more info.

update2:

i debugged revised code. try this. should work now. read inline comments see changed , why:

import android.os.bundle; import android.support.design.widget.navigationview; import android.support.v4.view.gravitycompat; import android.support.v4.widget.drawerlayout; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.util.log; import android.view.menu; import android.view.menuitem;  public class mainactivity extends appcompatactivity { //        view.onclicklistener, //        googleapiclient.connectioncallbacks, //        googleapiclient.onconnectionfailedlistener {       drawerlayout mdrawerlayout;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          toolbar toolbar = (toolbar) findviewbyid(r.id.my_toolbar);         setsupportactionbar(toolbar);         // missing sethomeasupindicator         getsupportactionbar().sethomeasupindicator(r.drawable.ic_menu);         getsupportactionbar().setdisplayhomeasupenabled(true);          // removed toolbar , drawer click listeners.         // they're not needed open drawer.         // drawer opens onoptionsitemselected().          mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer);         navigationview n = (navigationview) findviewbyid(r.id.nav);         n.setnavigationitemselectedlistener(new navigationview.onnavigationitemselectedlistener() {             @override             public boolean onnavigationitemselected(menuitem menuitem) {                 switch (menuitem.getitemid()) {                     ////.......                  }                 mdrawerlayout.closedrawers();  // close drawer                 return true;             }         });     }      @override     public boolean onoptionsitemselected(menuitem item) {          log.d("nick", "cwecnewkvneripnviewnfvipewnvipewnvpiewnvpiewnvpiewnvpirwnvprwvpo");         switch (item.getitemid()) {             // drawer/hamburger button             case android.r.id.home:                 mdrawerlayout.opendrawer(gravitycompat.start);  // open drawer                 log.d("nick", "cwecnewkvneripnviewnfvipewnvipewnvpiewnvpiewnvpiewnvpirwnvprwvpo");                 return true;          }         return super.onoptionsitemselected(item);     } }  // removed onconfigurationchanged(). // it's not needed since you're no longer using actionbardrawertoggle.  

update3: problem layout

looking @ activitymain.xml, see toolbar outside of drawerlayout. can't that. toolbar needs child of drawerlayout in order toolbar find proper context.

you need make drawerlayout root of activity. here's documentation, , specific quote is:

to add navigation drawer, declare user interface drawerlayout object root view of layout. inside drawerlayout, add 1 view contains main content screen (your primary layout when drawer hidden) , view contains contents of navigation drawer.

so basically, change activitymain.xml this:

<android.support.v4.widget.drawerlayout     android:id="@+id/drawer"     ... >      <relativelayout         android:id="@+id/d"         ...>          <android.support.v7.widget.toolbar             android:id="@+id/my_toolbar"             ... />          <!-- other content goes here -->      </relativelayout>      <android.support.design.widget.navigationview         android:id="@+id/nav"         ... />  </android.support.v4.widget.drawerlayout> 

hopefully, takes care of problems.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -