Android Double Retour Appuyez sur cette touche pour fermer l'application après avoir fragments

J'ai suivi ce tutoriel et certaines des réponses similaires sur.

Mon présent onBackPressed code est comme suit -

private static final int TIME_DELAY = 2000;
private static long back_pressed;

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        int fragments = getFragmentManager().getBackStackEntryCount();
        if (fragments > 0) {
            super.onBackPressed();
        } else {
            if (back_pressed + TIME_DELAY > System.currentTimeMillis()) {
                super.onBackPressed();
            } else {
                Toast.makeText(getBaseContext(), "Press once again to exit!",
                        Toast.LENGTH_SHORT).show();
            }
            back_pressed = System.currentTimeMillis();
        }
    }
}

Je suis ajoutant des fragments à l'arrière de la pile comme ça (et à certains endroits, je n'ai pas l'ajouter à la pile de retour) -

private void LoadSignDetailsFragment() {
    Bundle args = new Bundle();
    Fragment fragment = new SignDetailsFragment();
    args.putBoolean("hasValues", true);
    args.putBoolean("showBookmarkedSignsOnly", showBookmarkedSignsOnly);
    args.putInt("sign_id", signId);
    if (fragment != null) {
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        fragment.setArguments(args);
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
        fragmentTransaction.replace(R.id.container_body, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
}

Ce que je suis en train de faire, si il n'y a aucun fragment de backstack, seul onBackPressed migrer vers fragment précédent. Mais, si il n'y pas de Fragment dans la backstack, il doit afficher Toast pour le double retour appuyez sur cette touche pour fermer l'application.

Mon présent code, indique toujours le Toast, et demande le Double de la presse, indépendamment de la présence/absence de fragments dans backstack. Je suis incapable de comprendre pourquoi?

Consultez la documentation de getStackEntryAt(int i) et getStackEntryCount() ici developer.android.com/reference/android/app/... et modifier le ci-dessous les réponses en ajoutant quelques if conditions dans onBackPressed()

OriginalL'auteur Dr. Atul Tiwari | 2015-11-25