android - Connecting toolbar with the navigation drawer -


i have several activities want use same navigation drawer. here's part of activity class code related drawer:

toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); getsupportactionbar().setdisplayshowtitleenabled(false);  drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); actionbardrawertoggle toggle = new actionbardrawertoggle(             this, drawer, toolbar, r.string.navigation_drawer_open, r.string.navigation_drawer_close); drawer.adddrawerlistener(toggle); toggle.syncstate(); navigationview navigationview = (navigationview) findviewbyid(r.id.nav_view); navigationview.setnavigationitemselectedlistener(this); 

i'm planning make draweractivity class , extend activities want navigation drawer. therefore, have move drawer code draweractivity.

the problem:

toolbar important initialization of actionbardrawertoggle. every activity has different toolbar depending upon needs of activity. therefore, toolbar layouts must kept in respective layout xml files. how use toolbar in draweractivity class?

layout xml drawer:

<?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:layout_height="match_parent"     android:layout_width="match_parent"     android:id="@+id/frame_layout"     xmlns:android="http://schemas.android.com/apk/res/android">  </framelayout>  <android.support.design.widget.navigationview     android:id="@+id/nav_view"     app:itembackground="@drawable/drawer_list_selector"     style="@style/navigationdrawer"     app:headerlayout="@layout/sidenav_header"     app:menu="@menu/side_navigation_menu"     app:theme="@style/drawer"/>  </android.support.v4.widget.drawerlayout> 

here's sidenavigation activity (which i'm trying extend classes need navigation drawer): pastebin.com/hhemxku5

main statement of log says:

caused by: java.lang.nullpointerexception: attempt invoke virtual method 'void android.support.v7.app.actionbar.setdisplayshowtitleenabled(boolean)' on null object reference

here's link oncreate of 1 of activity class extends sidenavigation class: pastebin.com/ikyxvbda

okey want use drawer activity. posting code here. hope out.

first of need develop navigationdrawer. know can self.

now create child activity example home.java , extend drawer activity let's mainactivity.java.

it this.

public class home extends mainactivity{       toolbar toolbar;       @override      protected void oncreate(bundle savedinstancestate) {          super.oncreate(savedinstancestate);      } } 

now perform setcontentview in oncreate, bur here this.

@override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     getlayoutinflater().inflate(r.layout.home, framelayout);      toolbar = (toolbar) findviewbyid(r.id.toolbar);     setsupportactionbar(toolbar);      getsupportactionbar().setdisplayhomeasupenabled(true);     getsupportactionbar().sethomebuttonenabled(true); } 

where framelayout container, have take in mainactivity.

note : don't forget take toolbar in home activity. because override mainactivity's toolbar.

edit posting whole code please refer it. although have took custom navigation drawer can work navigationview too.

activity_main

<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitssystemwindows="true" >  <relativelayout     android:id="@+id/frame_container"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:fitssystemwindows="false" >      <!-- toolbar of mainactivity -->      <include         android:id="@+id/toolbar_headers"         layout="@layout/toolbar_header" /> </relativelayout>  <!-- here navigationview -->  <com.random.extraclasses.scriminsetsframelayout     android:id="@+id/container"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:layout_gravity="start"     android:layout_marginright="-8dp"     android:elevation="8dp"     android:fitssystemwindows="true"     app:insetforeground="#4000" >      <include         android:id="@+id/drawar_layout"         layout="@layout/drawar_layout" /> </com.gujarat.property.extraclasses.scriminsetsframelayout> 

mainactivity.java

public class mainactivity extends appcompatactivity implements onclicklistener {       protected relativelayout framelayout;      protected drawerlayout mdrawerlayout;      protected listview mdrawerlist;      protected scriminsetsframelayout mlayout;      protected actionbardrawertoggle mdrawertoggle;      protected static boolean islaunch = true;       toolbar toolbar;       private charsequence mtitle;       private string[] navmenutitles;      private typedarray navmenuicons;       private arraylist<navdraweritem> navdraweritems;      private navdrawerlistadapter adapter;       @override      protected void oncreate(bundle savedinstancestate) {          super.oncreate(savedinstancestate);          setcontentview(r.layout.activity_main);           navmenutitles = getresources().getstringarray(r.array.nav_drawer_items);           navmenuicons = getresources()             .obtaintypedarray(r.array.nav_drawer_icons);           framelayout = (relativelayout) findviewbyid(r.id.frame_container);          mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout);          mdrawerlist = (listview) findviewbyid(r.id.list);          mlayout = (scriminsetsframelayout) findviewbyid(r.id.container);           toolbar = (toolbar) findviewbyid(r.id.toolbar_headers);           setsupportactionbar(toolbar);           navdraweritems = new arraylist<navdraweritem>();           navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons             .getresourceid(0, -1)));          navdraweritems.add(new navdraweritem(navmenutitles[1], navmenuicons             .getresourceid(1, -1)));          navdraweritems.add(new navdraweritem(navmenutitles[2], navmenuicons             .getresourceid(2, -1)));          navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons             .getresourceid(3, -1)));           navmenuicons.recycle();           adapter = new navdrawerlistadapter(getapplicationcontext(),             navdraweritems);          mdrawerlist.setonitemclicklistener(new onitemclicklistener() {              @override              public void onitemclick(adapterview<?> parent, view view,                      int position, long id) {                  selectedpos = position - 1;                  displayview(position);              }          });           mdrawerlist.setadapter(adapter);          mdrawerlist.setfocusable(false);           getsupportactionbar().setdisplayhomeasupenabled(true);          getsupportactionbar().sethomebuttonenabled(true);             mdrawertoggle = new actionbardrawertoggle(this, mdrawerlayout,             r.drawable.ic_drawer, r.string.app_name) {          };          mdrawerlayout.setdrawerlistener(mdrawertoggle);           if (islaunch) {              islaunch = false;              displayview(0);          }       }       @override      public boolean onoptionsitemselected(menuitem item) {          if (mdrawertoggle.onoptionsitemselected(item)) {              return true;          }          return super.onoptionsitemselected(item);      }       private void displayview(int position) {           mdrawerlayout.closedrawer(mlayout);          mainactivity.position = position;          switch (position) {           case 0:              if (this.getclass().getsimplename().equals("home")) {              } else {                  intent = new intent(this, home.class);                  startactivity(i);                  overridependingtransition(r.anim.fadein, r.anim.fadeout);              }              break;          case 1:              if (this.getclass().getsimplename().equals("forsale")) {              } else {                  intent = new intent(this, forsale.class);                  startactivity(i);                  overridependingtransition(r.anim.fadein, r.anim.fadeout);              }              break;          case 2:               if (this.getclass().getsimplename().equals("forrent")) {               } else {                  intent = new intent(this, forrent.class);                  startactivity(i);                  overridependingtransition(r.anim.fadein, r.anim.fadeout);               }                break;          case 3:              if (this.getclass().getsimplename().equals("newprojects")) {              } else {                  intent = new intent(this, newprojects.class);                  startactivity(i);                  overridependingtransition(r.anim.fadein, r.anim.fadeout);              }              break;           default:              break;          }      }       @override      public void settitle(charsequence title) {          mtitle = title;          getsupportactionbar().settitle(mtitle);      }       @override      protected void onpostcreate(bundle savedinstancestate) {          super.onpostcreate(savedinstancestate);          mdrawertoggle.syncstate();      }       @override      public void onconfigurationchanged(configuration newconfig) {          super.onconfigurationchanged(newconfig);          mdrawertoggle.onconfigurationchanged(newconfig);      }       @override      public void onclick(view v) {       }  } 

and home.java

public class home extends mainactivity implements onclicklistener {  toolbar toolbar;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     getlayoutinflater().inflate(r.layout.home, framelayout);      toolbar = (toolbar) findviewbyid(r.id.toolbar);     setsupportactionbar(toolbar);      getsupportactionbar().setdisplayhomeasupenabled(true);     getsupportactionbar().sethomebuttonenabled(true);     getsupportactionbar().settitle(""); }  @override public void onbackpressed() {     super.onbackpressed();     if (mdrawerlayout.isdraweropen(mlayout)) {         islaunch = false;         mdrawerlayout.closedrawer(mlayout);     } else {         finishaffinity();     } } 

and reference home.xml

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:app="http://schemas.android.com/apk/res-auto"      android:id="@+id/main"      android:layout_width="match_parent"      android:layout_height="match_parent" >       <relativelayout          android:layout_width="match_parent"          android:layout_height="match_parent"          android:layout_below="@+id/toolbar"          android:background="@drawable/back51" >          <textview              android:id="@+id/etsearch"              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:layout_marginleft="10dp"              android:background="@android:color/transparent"              android:text="search property"              android:textcolor="#666666" />      </relativelayout>       <android.support.v7.widget.toolbar          android:id="@+id/toolbar"          android:layout_width="match_parent"          android:layout_height="wrap_content"          app:layout_scrollflags="scroll|enteralways"          android:background="@color/toobar"          android:minheight="?attr/actionbarsize"          android:theme="@style/themeoverlay.appcompat.dark"          app:popuptheme="@style/themeoverlay.appcompat.light" >      </android.support.v7.widget.toolbar>  </relativelayout> 

i hope out.


Comments

Popular posts from this blog

Ansible - ERROR! the field 'hosts' is required but was not set -

customize file_field button ruby on rails -

SoapUI on windows 10 - high DPI/4K scaling issue -