android - Back Press on fragments -



android - Back Press on fragments -

i using sliding menu in app , starts fragments mainactivity want close application when button pressed. doing opens activity when button pressed in lastly fragment want exit app when button pressed in lastly fragment. how can this.

this on create

@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); getwindow().requestfeature(window.feature_action_bar); getactionbar().setdisplayhomeasupenabled(true); getactionbar().sethomebuttonenabled(true); getactionbar().setbackgrounddrawable( new colordrawable(color.parsecolor("#0057b3"))); setcontentview(r.layout.activity_main); graphicutil = new graphicsutil(); mtitle = mdrawertitle = gettitle(); navmenutitles = getresources().getstringarray(r.array.nav_drawer_items); navmenuicons = getresources() .obtaintypedarray(r.array.nav_drawer_icons); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.list_slidermenu); navdraweritems = new arraylist<navdraweritem>(); // feeds navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons .getresourceid(0, -1))); // private feeds navdraweritems.add(new navdraweritem(navmenutitles[1], navmenuicons .getresourceid(1, -1))); // profile navdraweritems.add(new navdraweritem(navmenutitles[2], navmenuicons .getresourceid(2, -1))); // people , groups navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons .getresourceid(3, -1))); // messages navdraweritems.add(new navdraweritem(navmenutitles[4], navmenuicons .getresourceid(4, -1))); // favorites navdraweritems.add(new navdraweritem(navmenutitles[5], navmenuicons .getresourceid(5, -1))); // credits navdraweritems.add(new navdraweritem(navmenutitles[6], navmenuicons .getresourceid(6, -1))); // settings navdraweritems.add(new navdraweritem(navmenutitles[7], navmenuicons .getresourceid(7, -1))); // app navdraweritems.add(new navdraweritem(navmenutitles[8], navmenuicons .getresourceid(8, -1))); // contact navdraweritems.add(new navdraweritem(navmenutitles[9], navmenuicons .getresourceid(9, -1))); // log out navdraweritems.add(new navdraweritem(navmenutitles[10], navmenuicons .getresourceid(10, -1))); navmenuicons.recycle(); mdrawerlist.setonitemclicklistener(new slidemenuclicklistener()); adapter = new navdrawerlistadapter(getapplicationcontext(), navdraweritems); mdrawerlist.setadapter(adapter); mdrawertoggle = new actionbardrawertoggle(this, mdrawerlayout, r.drawable.ic_drawer, r.string.app_name, r.string.app_name) { public void ondrawerclosed(view view) { getactionbar().settitle(mtitle); invalidateoptionsmenu(); } public void ondraweropened(view drawerview) { getactionbar().settitle(mdrawertitle); invalidateoptionsmenu(); } }; mdrawerlayout.setdrawerlistener(mdrawertoggle); // open default fragment if (savedinstancestate == null) { displayview(0); } }

this display view method opens fragments

private void displayview(int position) { switch (position) { case 0: // fragment = new mypublicpostsfragment(); fragment = new myfeedsfragment(); break; case 1: fragment = new myprivatepostsfragment(); break; case 2: fragment = new myprofilefragment(); break; case 3: fragment = new peoplefragment(); break; case 4: fragment = new messagesfragment(); break; case 5: fragment = new favouritesfragment(); break; case 6: fragment = new creditsfragment(); break; case 7: fragment = new settingsfragment(); break; case 8: fragment = new aboutthisappfragment(); break; case 9: fragment = new contactusfragment(); break; case 10: fragment = new logoutfragment(); store.setloginstatus(null); break; default: break; } if (fragment != null) { fragmentmanager fragmentmanager = getsupportfragmentmanager(); fragmentmanager.begintransaction() .replace(r.id.frame_container, fragment) .addtobackstack(null).commit(); mdrawerlist.setitemchecked(position, true); mdrawerlist.setselection(position); settitle(navmenutitles[position]); mdrawerlayout.closedrawer(mdrawerlist); } else { log.e("main activity", "error in creating fragment"); }}

any help appreciated

thanx in advance

there several ways of doing (some betters others):

way 1: perform fragment transaction tag string. way in onbackpressed() on mainactivity can check findfragmentbytag current fragment is, if fragment want exit, exit, if not nothing.

way 2: displayview method using switch can store integer position in mainactivity, way in onbackpressed() can check integer is, , hence can know fragment is.

way 3: can create variable called mcurrentfragment store current fragment, in onbackpressed() can check instanceof fragment is, , apply same logic.

way 4: can create listener fragments must implement , when calling onbackpressed, phone call listener , whatever need do.

if need code examples tell me , i'll add together gladly.

edit 1:

keep in mind pseudocode, may contain typo or something, check compiler.

in mainactivity.java:

public class mainactivity extends fragmentactivity { // code... private fragment mcurrentfragment; // code... private void displayview(int position) { switch (position) { case 0: mcurrentfragment = new myfeedsfragment(); break; // substitute fragment mcurrentfragment in rest of method... } @override public void onbackpressed() { if (mcurrentfragment instanceof logoutfragment) { finish(); } else { // whatever want if necessary } }

}

android android-fragments slidingmenu

Comments