2017-10-13 8 views
0

Je travaille avec des fragments dans la disposition du tiroir de navigation. Je veux revenir à HomeFragment en appuyant sur le bouton de retour chaque fois que tout autre fragment est visible dans frame_container. et si le fragment home est déjà visible, je veux terminer MainActivity (navigation_drawer_activity). Aidez-moi à corriger ce code de OnBackPressed dans l'activité principale.comment implémenter findFragmentById dans onBackPressed pour trouver HomeFragment

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 

    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_home); 
    if(fragment!=null && fragment.isVisible()){ 
     clearBackStack(); 
     finish(); 
    }else { 
     clearBackStack(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_container,new HomeFragment()).commit(); 
    } 

} 
+0

Avez-vous utilisé ViewPager pour gérer votre fregment? – RRTW

+0

Je n'utilise pas la disposition de trame .. –

+0

Et gestionnaire de fragment. –

Répondre

0

Voici la solution. J'ai trouvé le fragment de frame_container. , puis vérifié si déclaration. . cela a renvoyé home_fragment. Merci pour vos réponses.

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 

    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frame_container); 
    if(fragment!=null && fragment instanceof HomeFragment && fragment.isVisible()){ 
     clearBackStack(); 
     finish(); 
    }else { 
     clearBackStack(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_container,new HomeFragment()).commit(); 
    } 

} 
0

essayer cette

@Override 
    public void onBackPressed() { 
     FragmentManager fm = getSupportFragmentManager(); 
     if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
      drawerLayout.closeDrawer(GravityCompat.START); 
     } else if (fm.getBackStackEntryCount() > 0) { 
      Log.i("MainActivity", "popping backstack"); 
      getSupportFragmentManager().popBackStackImmediate(); 
     } else { 
      Log.i("MainActivity", "nothing on backstack, calling super"); 
      super.onBackPressed(); 
     } 
    } 
+0

ce fragment retourné courant. et terminé l'activité chaque fois que je pressé. –

+0

avez-vous utilisé addToBackStack en remplaçant les fragments? –

+0

en fait, je ne veux pas itérer à travers tout le backstack en appuyant sur le dos. Je veux juste aller directement au fragment de la maison. –