Double back press to exit from fragment

微笑、不失礼 提交于 2020-05-15 09:50:29

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!