android - How to navigate to previous fragment using back-button within NavigationDrawer? -
i know similar questions have been asked before, can't seem find i’m looking for. problem button exiting app. i’m trying make navigate previous fragment. if open fragment1 - > fragment2 , press button take fragment1.
my current code looks this.
public class mainactivity extends fragmentactivity { private drawerlayout mdrawerlayout; private listview mdrawerlist; private actionbardrawertoggle mdrawertoggle; private charsequence mdrawertitle; private charsequence mtitle; private string[] mpagetitles; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mtitle = mdrawertitle = gettitle(); mpagetitles = getresources().getstringarray(r.array.menu_array); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.left_drawer); // 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 mdrawerlist.setadapter(new arrayadapter<string>(this, r.layout.drawer_list_item, mpagetitles)); mdrawerlist.setonitemclicklistener(new draweritemclicklistener()); // enable actionbar app icon behave action toggle nav drawer getactionbar().setdisplayhomeasupenabled(true); getactionbar().sethomebuttonenabled(true); // actionbardrawertoggle ties the proper interactions // between sliding drawer , action bar app icon mdrawertoggle = new actionbardrawertoggle(this, /* host activity */ mdrawerlayout, /* drawerlayout object */ r.drawable.ic_drawer, /* nav drawer image replace 'up' caret */ r.string.drawer_open, /* "open drawer" description accessibility */ r.string.drawer_close /* "close drawer" description accessibility */ ) { public void ondrawerclosed(view view) { getactionbar().settitle(mtitle); invalidateoptionsmenu(); // creates call // onprepareoptionsmenu() } public void ondraweropened(view drawerview) { getactionbar().settitle(mdrawertitle); invalidateoptionsmenu(); // creates call // onprepareoptionsmenu() } }; mdrawerlayout.setdrawerlistener(mdrawertoggle); // sets firstpage if no state found if (savedinstancestate == null) { selectitem(0); } } @override public boolean oncreateoptionsmenu(menu menu) { menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.main, menu); return super.oncreateoptionsmenu(menu); } /* called whenever call invalidateoptionsmenu() */ @override public boolean onprepareoptionsmenu(menu menu) { // if nav drawer open, hide action items related content // view return super.onprepareoptionsmenu(menu); } // toogles drawer menu @override public boolean onoptionsitemselected(menuitem item) { return mdrawertoggle.onoptionsitemselected(item); } /* click listner listview in navigation drawer */ private class draweritemclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { selectitem(position); } } private void selectitem(int position) { // update main content replacing fragments fragmentmanager fragmentmanager = getfragmentmanager(); fragmenttransaction fragmenttransaction = fragmentmanager.begintransaction(); switch (position) { case 0: kontaktinfofragment kontakt = new kontaktinfofragment(); fragmenttransaction.replace(r.id.content_frame, kontakt); fragmenttransaction.addtobackstack("replace"); fragmenttransaction.commit(); break; case 1: omossfragment omoss = new omossfragment(); fragmenttransaction.replace(r.id.content_frame, omoss); fragmenttransaction.addtobackstack("replace"); fragmenttransaction.commit(); break; case 2: mainscreenactivity mainscreen = new mainscreenactivity(); fragmenttransaction.replace(r.id.content_frame, mainscreen); fragmenttransaction.addtobackstack("replace"); fragmenttransaction.commit(); break; case 3: loginfragment login = new loginfragment(); fragmenttransaction.replace(r.id.content_frame, login); fragmenttransaction.addtobackstack("replace"); fragmenttransaction.commit(); break; case 4: contactformfragment form = new contactformfragment(); fragmenttransaction.replace(r.id.content_frame, form); fragmenttransaction.addtobackstack("replace"); fragmenttransaction.commit(); break; } // update selected item , title, close drawer mdrawerlist.setitemchecked(position, true); settitle(mpagetitles[position]); mdrawerlayout.closedrawer(mdrawerlist); } @override public void settitle(charsequence title) { mtitle = title; getactionbar().settitle(mtitle); }
}
when press button inside fragment onbackpressed() method of activity called if have declared that..so handling button fragments within navigation drawer can 1 in way..
mainactvity
public static boolean ismainactivityshown ; public static boolean isfragment1shown=false ; public static boolean isfragment2shown=false ; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); ismainactivityshown=true //inside oncreate method put ismainactivityshown true . . . } fragment currentfragment = new fragment1(); ismainactivityshown=false; //when moving fragment1 isfragment1shown=true; frgmanager = getfragmentmanager(); frgmanager.begintransaction().replace(r.id.content_frame, currentfragment) .commit(); @override public void onbackpressed() { if(ismainactivityshown) { finish(); } else if(isfragment1shown) { //write code handle button when in fragment1 } else if(isfragment2shown) { //when in fragment 2 pressing button move fragment1 fragment currentfragment = new fragment1(); isfragment2shown=false; isfragment1shown=true; fragmentmanager frgmanager; frgmanager = getfragmentmanager(); frgmanager.begintransaction().replace(r.id.content_frame, currentfragment) .commit(); } }
fragment1
fragment currentfragment = new fragment2(); mainactivity.isfragment1shown=false; mainactivity.isfragment2shown=true; frgmanager = getfragmentmanager(); frgmanager.begintransaction().replace(r.id.content_frame, currentfragment) .commit();
Comments
Post a Comment