android - Button on ToolBar won't open the Navigation Drawer -
i have created base activity contains navigation drawer.
the drawer open on slide, never through navigation button on toolbar. i've been stuck on quite while, , had working prior creating base class , don't think i've changed logically.
i know question has been asked before, i've gone through other similar posts , have not been able solve it.
thanks in advance!
public class draweractivity extends appcompatactivity implements navigationview.onnavigationitemselectedlistener { protected drawerlayout drawerlayout; private actionbardrawertoggle toggle; private toolbar toolbar; private navigationview navigationview; private boolean enabletoolbar; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); enabletoolbar = true; } @override public void setcontentview(int layoutresid){ super.setcontentview(r.layout.activity_drawer); settoolbar(); setdrawerlayout(); setnavigationdrawer(); settoolbaronclicklistener(); if(!usetoolbar()) toolbar.setvisibility(view.gone); inflatetocontentframe(layoutresid); } public void setusestoolbar(boolean _enable){ enabletoolbar = _enable; } private boolean usetoolbar(){ return enabletoolbar; } private void settoolbar(){ toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); } private void setdrawerlayout(){ drawerlayout = (drawerlayout)getlayoutinflater().inflate(r.layout.activity_drawer, null); toggle = new actionbardrawertoggle(this, drawerlayout, toolbar, r.string.navigation_drawer_open, r.string.navigation_drawer_close){ @override public void ondraweropened(view drawerview) { super.ondraweropened(drawerview); draweractivity.this.invalidateoptionsmenu(); } @override public void ondrawerclosed(view drawerview) { super.ondrawerclosed(drawerview); draweractivity.this.invalidateoptionsmenu(); } @override public void ondrawerslide(view drawerview, float slideoffset) { super.ondrawerslide(drawerview, slideoffset); draweractivity.this.toolbar.setalpha(1 - slideoffset / 2); } }; toggle.setdrawerindicatorenabled(true); drawerlayout.adddrawerlistener(toggle); drawerlayout.post(new runnable() { @override public void run() { toggle.syncstate(); } }); } private void setnavigationdrawer(){ navigationview = (navigationview) findviewbyid(r.id.nav_view); navigationview.setnavigationitemselectedlistener(this); } private void settoolbaronclicklistener(){ toolbar.setnavigationonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { draweractivity.this.drawerlayout.opendrawer(gravitycompat.start); } }); } private void inflatetocontentframe(int layoutresid){ framelayout content = (framelayout) findviewbyid(r.id.content_frame); layoutinflater inflater = (layoutinflater) this.getsystemservice(context.layout_inflater_service); view contentview = inflater.inflate(layoutresid, content, true); } @override public void onbackpressed() { if (drawerlayout.isdraweropen(gravitycompat.start)) { drawerlayout.closedrawer(gravitycompat.start); } else { super.onbackpressed(); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.drawer, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } @suppresswarnings("statementwithemptybody") @override public boolean onnavigationitemselected(menuitem item) { int id = item.getitemid(); intent _intent; if (id == r.id.nav_classes) { _intent = new intent(this, appointmentsactivity.class); } else if (id == r.id.nav_appointments) { _intent = new intent(this, appointmentsactivity.class); } else if (id == r.id.nav_clients) { _intent = new intent(this, appointmentsactivity.class); } else if (id == r.id.nav_payments) { _intent = new intent(this, appointmentsactivity.class); } else if(id == r.id.nav_settings){ _intent = new intent(this, appointmentsactivity.class); } else if (id == r.id.nav_share) { _intent = new intent(this, appointmentsactivity.class); } else if (id == r.id.nav_send) { _intent = new intent(this, appointmentsactivity.class); }else{ _intent = new intent(this, appointmentsactivity.class); } drawerlayout.closedrawer(gravitycompat.start); startactivity(_intent); return true; } }
xml:
<?xml version="1.0" encoding="utf-8"?> <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"> <framelayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent"> </framelayout> <include layout="@layout/app_bar_drawer" android:layout_width="match_parent" android:layout_height="match_parent" /> <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:headerlayout="@layout/nav_header_drawer" app:menu="@menu/activity_drawer_drawer" /> </android.support.v4.widget.drawerlayout>
the drawerlayout
instance you're setting toggle not instance that's on-screen. in setdrawerlayout()
method, you're inflating new layout that's never used.
instead of inflating there, use findviewbyid()
drawerlayout
instance that's created , added activity
in super.setcontentview()
call.
drawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout);
also, can omit toolbar.setnavigationonclicklistener()
call, actionbardrawertoggle
set listener itself, , handle opening , closing drawer internally.
Comments
Post a Comment