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?
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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez consulter ci-dessous le code pour votre besoin. Si vous n'êtes pas en utilisant v4 fragment, alors vous devez utiliser
getFragmentManager()
au lieu degetSupportFragmentManager()
pour obtenir la backstack comte. Ici, je suis en utilisant la valeur booléenne de vérifier si le dos est cliqué, si dans les 2 secondes, il n'est pas cliqué de nouveau, il deviendra faux de nouveau.getFragmentManager()
au lieu degetSupportFragmentManager()
. Après cette correction, même mon exemple de code a fonctionné. 🙂Génial! Avoir une belle journée.
Cela a fonctionné pour moi. Merci
a très bien fonctionné. Merci @himanshu1496
OriginalL'auteur himanshu1496
OriginalL'auteur Chinmayee Mishra
ce faire de façon simple
l'utilisation de code ci-dessous
sur le premier, cliquez sur le drapeau est vrai que sur le deuxième clic, il va dans si la condition de fermer
OriginalL'auteur raj
ajouter ce code dans votre fragment onCreateView
ou si vous voulez yo ajouter dans votre activité, vous devez remplacer les onBackPressed methhod et ajouter le même code.
exemple
mais il est recommandé de le faire dans une activité autre que le fragment
OriginalL'auteur droidev
Le chemin w/o gestionnaire:
OriginalL'auteur deathangel908