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
Post a Comment