0

J'ai plusieurs fragments dans mon application, et doubleBackPress pour quitter. Le problème est, le doubleBackPress pour quitter est en cours d'activation, peu importe quel fragment est affiché sur l'activité.Comment gérer BackPress en fragments?

Voici ce que j'ai essayé.

Le code MainActivity

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     if (doubleBackToExitPressedOnce) { 
      if (getFragmentManager().getBackStackEntryCount() > 0) { 
       getFragmentManager().popBackStack(); 
      } else { 
       super.onBackPressed(); 
      } 
      return; 
     } 

     this.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); 
    } 
} 

Voici comment je lance les fragments.

fragmentManager = getFragmentManager() ; 
fragmentTransaction = fragmentManager.beginTransaction(); 
CategoryFragment categoryFragment = new CategoryFragment(); 
fragmentTransaction.replace(R.id.container,categoryFragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

Répondre

1

Vous pouvez vous référer au code ci-dessous pour votre besoin. Si vous n'utilisez pas le fragment de support v4, vous devez utiliser getFragmentManager() au lieu de getSupportFragmentManager() pour obtenir le nombre de backstack. Ici, j'utilise une valeur booléenne pour vérifier si l'utilisateur clique sur le retour, si dans 2 secondes il n'est pas cliqué à nouveau, il redeviendra faux.

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; 
     } 
    } 

J'espère que ceci peut vous aider.

+0

J'ai remplacé ma partie else par l'ensemble de votre code, et 'getSupportFragmentManager' par' getFragmentManager'. Et ça a marché comme du charme. merci beaucoup –

+0

@Ishanhrx je suis heureux de vous aider, s'il vous plaît upvote ma réponse. –

0

Vous fragment sont essayez ceci remplacent:

fragmentTransaction.add (R.id.container, categoryFragment);

au lieu de

fragmentTransaction.replace (R.id.container, categoryFragment);