Reputation:
I used an activity and several pieces in my app sometimes when I'm on the first page (activity) and back pressed not going out of app and returns to the fragment or the same page
When this happens I've done a lot of work in the program
I used this code to fix this problem but it also applied to the fragments
@Override
public void onBackPressed() {
this.finish();
}
Why returns to the fragment or the same page
How this problem is solved
I'm using this now
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else if (!doubleBackToExitPressedOnce) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Click to exit again", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
} else {
super.onBackPressed();
return;
}
}
Way is going to be a fragment
TabirFragment tabirFragment = new TabirFragment();
Bundle bundle = new Bundle();
bundle.putInt("id", id);
bundle.putString("name", name);
tabirFragment.setArguments(bundle);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction().addToBackStack(null);
transaction.replace(R.id.main_activity, tabirFragment).commit();
Upvotes: 1
Views: 1197
Reputation: 153
The easiest solution i can give you is to keep no-history for the activity in the manifest file. and then override the back method for each activity.
<activity
android:name=".example"
android:noHistory="true">
</activity>
Upvotes: 0
Reputation: 7944
When you used multiple fragment and activity When you switch activity by using method startActivity(), always use method finish(); when you back pressed then you will never get multiple activity and fragment and use onBackPressed method on main activity.
boolean doubleBackToExitPressedOnce=false;
@Override
public void onBackPressed() {
//Checking for fragment count on backstack
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else if (!doubleBackToExitPressedOnce) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this,"Please click back again to exit.", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
} else {
super.onBackPressed();
return;
}
}
Upvotes: 0
Reputation: 59168
If you have multiple activities on the stack, then:
finish() - finishes the activity where it is called from and you see the previous activity.
There is also system.exit
but that would not work in your case:
System.exit(0) - restarts the app with one fewer activity on the stack. So, if you called ActivityB from ActivityA, and System.exit(0) is called in ActivityB, then the application will be killed and started immediately with only one activity ActivityA
I recommend you use finishAffinity()
. It will finish the current activity as well as all activities immediately below it. I remind you that it is supported by only API level 16+
Upvotes: 1
Reputation: 1490
several pieces what? fragments, getting trouble to understand, anyway if you want to manage frag and onBackPress, use this
private void setUpBackStackListener() {
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Fragment currentFragment = getFragmentManager().findFragmentById(R.id.am_frameLayout);
if (currentFragment != null) {
int myCount = getFragmentManager().getBackStackEntryCount();
if (LOG_DEBUG) Log.e(TAG, "backStackCount : " + myCount);
String currentFragName = currentFragment.getClass().getSimpleName();
if (currentFragName.equalsIgnoreCase(FragOne.class.getSimpleName())) {
shouldExit = true;
} else if (currentFragName.equalsIgnoreCase(FragTwo.class.getSimpleName())) {
shouldExit = false;
}
}
}
}
});
}
@Override
public void onBackPressed() {
if (shouldExit == true) {
if (LOG_DEBUG)
Log.e(TAG, " Yeah exit douche:" + shouldExit + " isLastEntry : Testing :" + isLastEntry);
super.onBackPressed();
} else {
getFragmentManager().popBackStack();
}
}
,if this not you seeking, you might want to clear what you want in a bit subtle way
Upvotes: 0