Reputation: 173
I am using sliding menu in my app and starts fragments from MainActivity i want to close application when back button is pressed. what it is doing that it opens the activity when back button is pressed in last fragment but i want to exit the app when back button is pressed in last fragment. how can i do this.
this is my 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>();
// My Feeds
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
.getResourceId(0, -1)));
// Private Feeds
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons
.getResourceId(1, -1)));
// My Profile
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons
.getResourceId(2, -1)));
// People and 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)));
// About this app
navDrawerItems.add(new NavDrawerItem(navMenuTitles[8], navMenuIcons
.getResourceId(8, -1)));
// Contact us
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 my display view method that opens the 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 would be greatly appreciated
Thanx in advance
Upvotes: 0
Views: 829
Reputation: 547
There are several ways of doing this (some betters than others):
Way 1: Perform a fragment transaction with a TAG string. That way in onBackPressed()
on the MainActivity you can check with findFragmentByTag
what the current fragment is, if is the fragment you want to exit, then exit, if not do nothing.
Way 2: As your displayView
method is using a switch you can store the integer position in your MainActivity, that way in onBackPressed()
you can check what integer is, and therefore you can know what fragment is.
Way 3: You can also create a variable called mCurrentFragment
to store the current fragment, in onBackPressed()
you can check with instanceOf
what fragment is, and apply the same logic.
Way 4: You can create a listener that the fragments must implement and when calling onBackPressed
, then call the listener and do whatever you need to do.
If you need code examples tell me and I'll add it gladly.
EDIT 1:
Keep in mind that this is pseudocode, it may contain any typo or something, check it properly with the compiler.
In your 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 for mCurrentFragment in the rest of the method...
}
@Override
public void onBackPressed() {
if (mCurrentFragment instanceof LogOutFragment) {
finish();
} else {
// Do whatever you want to do if necessary
}
}
}
Upvotes: 0
Reputation: 1
Put the following code in your MainActivity().java
@Override
public void onBackPressed()
{
// Do Here what ever you want do on back press;
finish();
}
Upvotes: 0