android - Navigation Drawer not closing -


i have implemented navigationdrawer in android.i don't understand how close drawer when item drawer list selected.the foolowing code gives me null pointer exception. mainactivity:

public class mainactivity extends actionbaractivity {      string[] planet={"earth","mars","jupiter"};     listview lv;     drawerlayout mdrawerlayout;     navigationdrawerfragment navigationdrawerfragment;     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         if(savedinstancestate==null){              earth earthfrag=new earth();             fragmentmanager fragmentmanager=getsupportfragmentmanager();             fragmenttransaction transaction=fragmentmanager.begintransaction();             transaction.add(r.id.mainactivity,earthfrag,"earth").commit();          }         toolbar toolbar = (toolbar) findviewbyid(r.id.app_bar);         setsupportactionbar(toolbar);         mdrawerlayout=(drawerlayout)findviewbyid(r.id.nav_drawer);         navigationdrawerfragment = (navigationdrawerfragment) getsupportfragmentmanager().findfragmentbyid(r.id.drawer_fragment);         navigationdrawerfragment.setup(mdrawerlayout, toolbar);         lv= (listview) findviewbyid(r.id.listview);         lv.setadapter(new arrayadapter<string>(getapplicationcontext(),android.r.layout.simple_list_item_1,planet));         lv.setonitemclicklistener(new adapterview.onitemclicklistener() {             @override             public void onitemclick(adapterview<?> parent, view view, int position, long id) {                 fragmentmanager fragmentmanager=getsupportfragmentmanager();                 fragmenttransaction transaction=fragmentmanager.begintransaction();                     if(position==2){                         jupiter jupiterfrag=new jupiter();                         transaction.replace(r.id.mainactivity, jupiterfrag, "jupiter").commit();                     }                 if (position==1){                     mars marsfrag=new mars();                     transaction.replace(r.id.mainactivity,marsfrag,"mars").commit();                 }                 if (position==0){                     earth earthfrag=new earth();                     transaction.replace(r.id.mainactivity,earthfrag,"earth").commit();                 }     mdrawerlayout.closedrawer(lv);             }         });     }       @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.menu_main, 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);     } } 

the navigationdrawerfragment :

public class navigationdrawerfragment extends fragment {      private actionbardrawertoggle mactionbardrawertoggle;     private  drawerlayout mdrawerlayout;      @override     public view oncreateview(layoutinflater inflater, viewgroup container,bundle savedinstancestate) {         return inflater.inflate(r.layout.drawer_fragment,container,false);     }      public void setup(drawerlayout drawerlayout,toolbar toolbar) {         mdrawerlayout=drawerlayout;         mactionbardrawertoggle=new actionbardrawertoggle(getactivity(),mdrawerlayout,toolbar,r.string.drawer_open,r.string.drawer_close){             @override             public void ondraweropened(view drawerview) {                 super.ondraweropened(drawerview);             }              @override             public void ondrawerclosed(view drawerview) {                 super.ondrawerclosed(drawerview);             }         };         mdrawerlayout.setdrawerlistener(mactionbardrawertoggle);         mdrawerlayout.post(new runnable() {             @override             public void run() {                mactionbardrawertoggle.syncstate();             }         });     } } 

the activity_main.xml:

<?xml version="1.0"?> <android.support.v4.widget.drawerlayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/nav_drawer"     android:layout_width="match_parent"     android:layout_height="match_parent">     <linearlayout         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical"         tools:context=".mainactivity">         <include             android:id="@+id/app_bar"             layout="@layout/app_bar" />         <relativelayout             android:id="@+id/mainactivity"             android:layout_width="match_parent"             android:layout_height="match_parent"></relativelayout>     </linearlayout>     <fragment         android:id="@+id/drawer_fragment"         android:name="com.example.joy.ecoapp.navigationdrawerfragment"         android:layout_width="280dp"         android:layout_height="match_parent"         android:layout_gravity="start"         tools:layout="@layout/drawer_fragment" /> </android.support.v4.widget.drawerlayout> 

i believe need wrap fragment in container, e.g. linearlayout. use container drawer:

<linearlayout     android:id="@+id/lv_wrapper"     android:layout_width="240dp"     android:layout_height="match_parent"     android:layout_gravity="start"     android:background="@android:color/background_light"     android:padding="5dp" >     <fragment          android:layout_height="match_parent"         android:layout_width="match_parent"         android:id="@+id/drawer_fragment"         tools:layout="@layout/drawer_fragment"         android:name="com.example.joy.ecoapp.navigationdrawerfragment" /> </linearlayout> 

then in code instead of calling

mdrawerlayout.closedrawer(lv); 

call new wrapper:

mdrawerlayout.closedrawer(findviewbyid(r.id.lv_wrapper); 

Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -