java - Android how toggle with the button in toolbar to open/close navigation drawer with Fragments -


i new in android development after reading many tutorials , documentation , spending time managed create navigation drawer toolbar. problem can open drawer swiping left side of screen (not capable open/close drawer toolbar) don't know how in oncreateview can access navigation drawer id not set in oncreateview's setcontentview set in oncreate's setcontentview of class. use fragments. attach entire code , appreciate if button in toolbar ( id burger_btn) how can change code open , close drawer. thanks

############### dashboardactivity.java

public class dashboardactivity extends actionbaractivity implements messagereceived,navigationdrawerfragment.navigationdrawercallbacks {      /**      * fragment managing behaviors, interactions , presentation of navigation drawer.      */     private navigationdrawerfragment mnavigationdrawerfragment;      /**      * used store last screen title. use in      */     private charsequence mtitle;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.navigation_drawer);          mnavigationdrawerfragment = (navigationdrawerfragment)                 getsupportfragmentmanager().findfragmentbyid(r.id.navigation_drawer);         mtitle = gettitle();          // set drawer.         mnavigationdrawerfragment.setup(                 r.id.navigation_drawer,                 (drawerlayout) findviewbyid(r.id.drawer_layout));      }      @override     public void onnavigationdraweritemselected(int position) {         // update main content replacing fragments         fragmentmanager fragmentmanager = getsupportfragmentmanager();         fragmentmanager.begintransaction()                 .replace(r.id.container, placeholderfragment.newinstance(position + 1))                 .commit();     }      @override     public boolean oncreateoptionsmenu(menu menu) {         if (!mnavigationdrawerfragment.isdraweropen()) {             // show items in action bar relevant screen             // if drawer not showing. otherwise, let drawer             // decide show in action bar.             return true;         }         return super.oncreateoptionsmenu(menu);     }      @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();          return super.onoptionsitemselected(item);     }      /**      * placeholder fragment containing simple view.      */     public static class placeholderfragment extends fragment {         /**          * fragment argument representing section number          * fragment.          */         private static final string arg_section_number = "section_number";          /**          * returns new instance of fragment given section          * number.          */         public static placeholderfragment newinstance(int sectionnumber) {             placeholderfragment fragment = new placeholderfragment();             bundle args = new bundle();             args.putint(arg_section_number, sectionnumber);             fragment.setarguments(args);             return fragment;         }          public placeholderfragment() {         }          @override         public view oncreateview(layoutinflater inflater, viewgroup container,                                  bundle savedinstancestate) {             final view rootview = inflater.inflate(r.layout.dashboard_activity, container, false);              lbl_notifications_amount = (textview) rootview.findviewbyid(r.id.lbl_notifications_amount);              // set toolbar replace action bar.             toolbar toolbar = (toolbar) rootview.findviewbyid(r.id.toolbar);             ((actionbaractivity) getactivity()).setsupportactionbar(toolbar);             ((actionbaractivity) getactivity()).getsupportactionbar().setdisplayshowtitleenabled(false);             toolbar.settitletextcolor(getresources().getcolor(android.r.color.white)); 

// here don't know how navigation drawer id layout connected oncreate not oncreateview?

/*          drawerlayout mdrawerlayout = (drawerlayout) rootview.findviewbyid(r.id.drawer_layout);              actionbardrawertoggle mdrawertoggle = new actionbardrawertoggle(                     getactivity(),  mdrawerlayout, toolbar,                     r.string.navigation_drawer_open, r.string.navigation_drawer_close             );             mdrawerlayout.setdrawerlistener(mdrawertoggle);             ((actionbaractivity) getactivity()).getsupportactionbar().setdisplayhomeasupenabled(true);             ((actionbaractivity) getactivity()). getsupportactionbar().sethomebuttonenabled(true);             mdrawertoggle.syncstate(); */               return rootview;         }     } } 
########################## navigationdrawerfragment.java
/**  * fragment used managing interactions , presentation of navigation drawer.  * see <a href="https://developer.android.com/design/patterns/navigation-drawer.html#interaction">  * design guidelines</a> complete explanation of behaviors implemented here.  */ public class navigationdrawerfragment extends fragment {      /**      * remember position of selected item.      */     private static final string state_selected_position = "selected_navigation_drawer_position";      /**      * per design guidelines, should show drawer on launch until user manually      * expands it. shared preference tracks this.      */     private static final string pref_user_learned_drawer = "navigation_drawer_learned";      /**      * pointer current callbacks instance (the activity).      */     private navigationdrawercallbacks mcallbacks;      /**      * helper component ties action bar navigation drawer.      */     private actionbardrawertoggle mdrawertoggle;      private drawerlayout mdrawerlayout;    // private listview mdrawerlistview;     private view mfragmentcontainerview;      private int mcurrentselectedposition = 0;     private boolean mfromsavedinstancestate;     private boolean muserlearneddrawer;      public navigationdrawerfragment() {     }      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          // read in flag indicating whether or not user has demonstrated awareness of         // drawer. see pref_user_learned_drawer details.         sharedpreferences sp = preferencemanager.getdefaultsharedpreferences(getactivity());         muserlearneddrawer = sp.getboolean(pref_user_learned_drawer, true);          if (savedinstancestate != null) {             mcurrentselectedposition = savedinstancestate.getint(state_selected_position);             mfromsavedinstancestate = true;         }          // select either default item (0) or last selected item.         selectitem(mcurrentselectedposition);     }      @override     public void onactivitycreated(bundle savedinstancestate) {         super.onactivitycreated(savedinstancestate);         // indicate fragment influence set of actions in action bar.         sethasoptionsmenu(true);     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {          view simplefragmentview = inflater.inflate(r.layout.fragment_navigation_drawer,container,false);      return simplefragmentview;     }      public boolean isdraweropen() {         return mdrawerlayout != null && mdrawerlayout.isdraweropen(mfragmentcontainerview);     }      /**      * users of fragment must call method set navigation drawer interactions.      *      * @param fragmentid   android:id of fragment in activity's layout.      * @param drawerlayout drawerlayout containing fragment's ui.      */     public void setup(int fragmentid, drawerlayout drawerlayout) {         mfragmentcontainerview = getactivity().findviewbyid(fragmentid);         mdrawerlayout = drawerlayout;          // set custom shadow overlays main content when drawer opens         mdrawerlayout.setdrawershadow(r.drawable.drawer_shadow, gravitycompat.start);         // set drawer's list view items , click listener           // actionbardrawertoggle ties the proper interactions         // between navigation drawer , action bar app icon.         mdrawertoggle = new actionbardrawertoggle(                 getactivity(),                    /* host activity */                 mdrawerlayout,                    /* drawerlayout object */                 r.string.navigation_drawer_open,  /* "open drawer" description accessibility */                 r.string.navigation_drawer_close  /* "close drawer" description accessibility */         ) {             @override             public void ondrawerclosed(view drawerview) {                 super.ondrawerclosed(drawerview);                 if (!isadded()) {                     return;                 }                  getactivity().supportinvalidateoptionsmenu(); // calls onprepareoptionsmenu()             }              @override             public void ondraweropened(view drawerview) {                 super.ondraweropened(drawerview);                 if (!isadded()) {                     return;                 }                  if (!muserlearneddrawer) {                     // user manually opened drawer; store flag prevent auto-showing                     // navigation drawer automatically in future.                     muserlearneddrawer = true;                     sharedpreferences sp = preferencemanager                             .getdefaultsharedpreferences(getactivity());                     sp.edit().putboolean(pref_user_learned_drawer, true).apply();                 }                  getactivity().supportinvalidateoptionsmenu(); // calls onprepareoptionsmenu()             }         };          // if user hasn't 'learned' drawer, open introduce them drawer,         // per navigation drawer design guidelines.         if (!muserlearneddrawer && !mfromsavedinstancestate) {             mdrawerlayout.opendrawer(mfragmentcontainerview);         }          // defer code dependent on restoration of previous instance state.         mdrawerlayout.post(new runnable() {             @override             public void run() {                 mdrawertoggle.syncstate();             }         });          mdrawerlayout.setdrawerlistener(mdrawertoggle);     }      private void selectitem(int position) {         mcurrentselectedposition = position;          if (mdrawerlayout != null) {             mdrawerlayout.closedrawer(mfragmentcontainerview);         }         if (mcallbacks != null) {             mcallbacks.onnavigationdraweritemselected(position);         }     }      @override     public void onattach(activity activity) {         super.onattach(activity);         try {             mcallbacks = (navigationdrawercallbacks) activity;         } catch (classcastexception e) {             throw new classcastexception("activity must implement navigationdrawercallbacks.");         }     }      @override     public void ondetach() {         super.ondetach();         mcallbacks = null;     }      @override     public void onsaveinstancestate(bundle outstate) {         super.onsaveinstancestate(outstate);         outstate.putint(state_selected_position, mcurrentselectedposition);     }      @override     public void onconfigurationchanged(configuration newconfig) {         super.onconfigurationchanged(newconfig);         // forward new configuration drawer toggle component.         mdrawertoggle.onconfigurationchanged(newconfig);     }      @override     public void oncreateoptionsmenu(menu menu, menuinflater inflater) {         // if drawer open, show global app actions in action bar. see         // showglobalcontextactionbar, controls top-left area of action bar.         if (mdrawerlayout != null && isdraweropen()) {          }         super.oncreateoptionsmenu(menu, inflater);     }      @override     public boolean onoptionsitemselected(menuitem item) {         if (mdrawertoggle.onoptionsitemselected(item)) {             return true;         }           return super.onoptionsitemselected(item);     }       private actionbar getactionbar() {         return ((actionbaractivity) getactivity()).getsupportactionbar();     }      /**      * callbacks interface activities using fragment must implement.      */     public static interface navigationdrawercallbacks {         /**          * called when item in navigation drawer selected.          */         void onnavigationdraweritemselected(int position);     } } 
#################### navigation_drawer.xml
<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout"     android:layout_width="match_parent" android:layout_height="match_parent"     tools:context=".dashboardactivity">      <framelayout android:id="@+id/container" android:layout_width="match_parent"         android:layout_height="match_parent"          />       <fragment android:id="@+id/navigation_drawer"         android:layout_width="240dp" android:layout_height="match_parent"         android:layout_gravity="start"         android:name="com.packagename.navigationdrawerfragment"         tools:layout="@layout/fragment_navigation_drawer" />  </android.support.v4.widget.drawerlayout> 
#################### fragment_navigation_drawer.xml
<relativelayout     android:layout_width="match_parent"     android:layout_height="match_parent"     xmlns:android="http://schemas.android.com/apk/res/android"     android:background="@color/light_green">      <textview         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:textappearance="?android:attr/textappearancemedium"         android:text="@string/dashboard"         android:textcolor="@color/white"         android:textstyle="bold"         android:id="@+id/dashboardtextview"         android:layout_alignparenttop="true"         android:layout_centerhorizontal="true"         android:layout_margintop="95dp" /> </relativelayout> 
################ dashboard_activity.xml
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="@color/dark_blue">     <android.support.v7.widget.toolbar         android:id="@+id/toolbar"         android:minheight="?attr/actionbarsize"         android:height="@dimen/activity_header_height"         android:background="@color/light_green"         android:layout_width="match_parent"         android:layout_height="wrap_content">      </android.support.v7.widget.toolbar>      <textview         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:textappearance="?android:attr/textappearancesmall"         android:text="@string/dashboard"         android:paddingtop="15dp"         android:textsize="20sp"         android:id="@+id/titletoolbar"         android:layout_alignparenttop="true"         android:layout_centerhorizontal="true"         android:textcolor="@color/white"         android:layout_alignbottom="@+id/toolbar" />      <imagebutton         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginleft="10dp"         android:layout_margintop="15dp"         android:id="@+id/burger_btn"         android:src="@drawable/burger_btn"         android:background="@color/light_green"         android:layout_marginright="5dp"          />       <relativelayout         android:id="@+id/badges_area"         android:layout_width="match_parent"         android:layout_height="@dimen/dashboard_badges_height"         android:layout_above="@+id/btn_notifications"         android:layout_alignparentleft="true"         android:layout_alignparentstart="true"         android:layout_marginleft="@dimen/dashboard_horizontal_margin"         android:background="@drawable/badge_dashboard_area"> ... ... 

p.s:my intent id of burger_btn (the layout of dashboard_activity) open , close navigation drawer. appreciate if me changes in code need so.

if want open/close navigation drawer toolbar, try change layout of navigation_drawer be:

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent"      >     <android.support.v7.widget.toolbar     android:id="@+id/toolbar"     android:minheight="?attr/actionbarsize"     android:height="@dimen/activity_header_height"     android:background="@color/light_green"     android:layout_width="match_parent"     android:layout_height="wrap_content">  </android.support.v7.widget.toolbar>   <android.support.v4.widget.drawerlayout       xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"        android:id="@+id/drawer_layout"     android:layout_width="match_parent" android:layout_height="match_parent"     tools:context=".dashboardactivity">      <framelayout android:id="@+id/container"          android:layout_width="match_parent"        android:layout_height="match_parent"       />       <fragment android:id="@+id/navigation_drawer"          android:layout_width="240dp" android:layout_height="match_parent"          android:layout_gravity="start"          android:name="com.packagename.navigationdrawerfragment"          tools:layout="@layout/fragment_navigation_drawer" />    </android.support.v4.widget.drawerlayout>  </linearlayout>  

and accordingly, move toolbar related codes fragment activity


Comments

Popular posts from this blog

shopping cart - Page redirect not working PHP -

php - How to modify a menu to show sub-menus -

python - Installing PyDev in eclipse is failed -