问题
Since question is quite similar but I didn't found an exact answer to it. I tried the answer on the link below but it is not working!!
Android Double Back Press to close the app having fragments
Here are my codes:
public interface OnBackPressedListener {
void onBackPressed();
}
Now the fragment:
public class HomeFragment extends Fragment implements View.OnClickListener, OnBackPressedListener{
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
//Checking for fragment count on backstack
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else if (!doubleBackToExitPressedOnce) {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(getActivity(),"Tap again to exit.", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
}
Tried using getSupportFragmentManager() as well, but it is highlighted red. I need to double tap from the fragment (a bottom navigation bar in android) to exit from application.
回答1:
Try this code and it always works.
At top add this
private boolean isFirstBackPressed = false;
Now inside onBackPressed
method add below code.
Add this:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() != 0){
super.onBackPressed();
}else{
if (isFirstBackPressed) {
super.onBackPressed();
} else {
isFirstBackPressed = true;
showMessage("Press back again to exit");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
isFirstBackPressed = false;
}
}, 1500);
}
}
}
回答2:
private boolean isBackPressedToExit;
private void onBackPressed() {
if (isBackPressedToExit) {
finish();
return;
}
isBackPressedToExit = true;
Utility.toast(TabActivity.this, getString(R.string.msg_press_again_to_exit));
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
isBackPressedToExit = false;
}
}, 2000);
}
回答3:
You don't need a handler for this:
@Override
public void onBackPressed() {
long currentMillis = System.currentTimeMillis();
if (currentMillis - this.lastPressed < 2000 && getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
}
this.lastPressed = currentMillis;
}
回答4:
if you are using NavigationComponent :
@Override
public void onBackPressed() {
if (navController.getCurrentDestination().getId() == navController.getGraph().getStartDestination()) {
if (doubleBackToExitPressedOnce) super.onBackPressed();
else onHandlerStart();
} else super.onBackPressed();
}
private void onHandlerStart() {
doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() doubleBackToExitPressedOnce = false;
}, 2000);
}
来源:https://stackoverflow.com/questions/50364050/double-back-press-to-exit-from-fragment