2017-09-12 1 views
0

Dans mon application, j'utilise ViewPager pour afficher deux fragments dans l'activité.
Dans un de cette fragments j'utilise NavigationDrawer, je veux quand cliquez sur onBackPress fermer cette NavigationDrawer.
Comment mettre onBackPress en Fragment sur Android

J'écris ci-dessous le code pour ouvrir ce tiroir:

reviewSerialFrag_DrawerLayout.openDrawer(Gravity.END); 

Je veux quand cliquez sur onBackPress Fermer ce tiroir avec ci-dessous le code:

reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END); 

Comment puis-je il? S'il vous plaît aidez-moi

Répondre

0
/Try to use below code snipet/ 

    @Override 
    public void onBackPressed() 
    { 

int count = getFragmentManager().getBackStackEntryCount(); 

// count --> Is your current fragment 

if (count == 0) 
{ 
    if(reviewSerialFrag_DrawerLayout.isDrawerVisible(GravityCompat.END)) 
    { 
     reviewSerialFrag_DrawerLayout.closeDrawer(GravityCompat.END); 
    } 

} 


} 
+0

merci, mais nous ne pouvons pas utiliser 'public void onBackPressed()' methos en fragments mon bro –

+0

@YoYoAnimate Vérifiez la solution mise à jour – yash786

+0

Je ne peux pas utiliser @Override public void onBackPressed(). :( –

0

Dans votre ActivityonBackPressed() écrire ci-dessous le code

@Overrdie 
public void onBackPressed(){ 
Fragment currentFragment = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container); 

    if(currentFragment instanceof YourDrawerFragment && reviewSerialFrag_DrawerLayout.isDrawerVisible(GravityCompat.END)) 
     { 
      reviewSerialFrag_DrawerLayout.closeDrawer(GravityCompat.END); 
      return; 
     } 
    super.onBackPresses(): 
} 
+0

pouvez-vous envoyer moi votre ID Skype? s'il vous plaît –

+0

je n'utilise pas skype, vous pouvez le mentionner ici –

0

Vous pouvez le faire fermer votre tiroir presse Retour

@Overrdie 
public void onBackPressed(){ 
super.onBackPresses(): 
if(reviewSerialFrag_DrawerLayout.isDrawerVisible(GravityCompat.END)){ 
     reviewSerialFrag_DrawerLayout.closeDrawer(GravityCompat.END); 
} 
} 
0

En général, je trouve qu'il est plus facile à utilisez le modèle Observer et déléguez l'événement de retour arrière jusqu'au fragment. Cela vous permettra de garder l'activité et de séparer les préoccupations séparées.

interface OnBackPressedListener { 
    public void onBackPressed(); 
} 

Ensuite, dans votre fragment, mettre en œuvre cette OnBackPressedListener

class MyFragment extends Fragment implements OnBackPressedListener{ 

    public void onBackPressed(){...} 

} 

Et enfin, dans votre activité, vous pouvez effectuer les opérations suivantes:

class MyActivity extends Activity { 
    @Override 
    public void onBackPressed(){ 

    // Grab all the fragments that are 'observing' the back press event 
    Fragment currentFragment = 
     getFragmentManager().findFragmentById(R.id.fragment_container); 

    if(currentFragment != null && currentFragment instanceof OnBackPressedListener) { 
     // delegate this back press event down to the fragment 
     OnBackPressedListener backFragment = (OnBackPressedListener) currentFragment; 
     backFragment.onBackPressed(); 
    } 

    super.onBackPressed(): 
} 
+0

merci, mais pas trouvé 'R.id.fragment_container'. ce qui est' R.id.fragment_container'? –

+0

C'est l'id vous pour le conteneur hébergeant votre fragment.C'était juste un exemple donc votre identifiant est probablement différent – Jon

+0

@Hey mon ami, pouvez-vous m'envoyer votre ID Skype? s'il vous plaît –

0

Dans la solution de Jon, super. onBackPressed sera toujours appelé. Ce n'est pas nécessairement le cas. Pour ce faire, il suffit que l'implémentation renvoie un booléen et agisse en fonction du résultat.

Ma solution presque identique here

public interface IOnBackPressed { 
    /** 
    * Si vous retouné true le back press ne sera pas pris en compte, sinon l'activité agira naturellement 
    * @return true si votre traitement est prioritaire sinon false 
    */ 
    boolean onBackPressed(); 
} 

voir le lien pour more details