2017-09-14 1 views
0

Dans mon application, j'utilise ViewPager pour montrer deux fragments dans une activité. Dans l'un des fragments, j'utilise NavigationDrawer. Je veux quand cliquez sur onBackPress fermer cette NavigationDrawer.Comment utiliser onBackPress en fragment

j'ai écrit ci-dessous le code pour ouvrir ce tiroir:

reviewSerialFrag_DrawerLayout.openDrawer(Gravity.END); 

Je veux que quand je clique sur onBackPress il fermer ce tiroir ci-dessous le code:

reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END); 

questionneur , mis dans quel est le problème actuel, s'il vous plaît

+0

Votre application contient-elle plusieurs tiroirs? –

+0

@JRamesh, dans mon application, j'utilise Drawer dans l'un des fragments –

Répondre

0

onBackpress() o nly appelé dans le fragment si vous avez besoin d'un événement de presse arrière dans le fragment que vous devez mettre en œuvre interface pour obtenir onBackPress() rappel.

En activité:

public MyActivity extends AppCompatActivity{ 

private BackPressListener backPressListener; 

    @Override 
    public void onBackPressed() { 
     if (backPressListener != null) { 
      backPressListener.onActivityBackPress(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    public void setBackPressListener(BackPressListener backPressListener) { 
     this.backPressListener = backPressListener; 
    } 

    public interface BackPressListener{ 
     void onActivityBackPress(); 
    } 

} 

Dans Fragment:

public class MyFragment extends Fragment implements BackPressListener{ 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ((MyActivity)getActivity()).setBackPressListener(this); 
    } 

    @Override 
    public void onActivityBackPress() { 
     // handle your back press here. 

     reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END); 

     getActivity().onBackPressed(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     ((MyActivity)getActivity()).setBackPressListener(null); 
    } 
} 
+0

pouvez-vous m'envoyer du code? Je suis amateur, s'il vous plaît mon ami. J'ai vraiment besoin de ton aide. S'il vous plaît –

+0

pouvez-vous m'aider? –

+0

vérifier ma réponse mise à jour. vous pouvez maintenant gérer la presse arrière dans le fragment –

0

La meilleure solution est de créer votre interface, et mettre en œuvre dans le fragment.

Solution here : implement onBackpress in Fragment

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 plus de détails ... easy sample

0

Ma solution:
Créer BaseFragment.java:

public class BaseFragment extends Fragment 
    { 
     public boolean onBackPressed() 
     { 
      return false; 
     } 
    } 

puis étendre votre fragment par ce BaseFragment et dans l'activité:

@Override 
public void onBackPressed() 
{ 
    if (!yourFragment.onBackPressed()) 
     super.onBackPressed(); 
} 

En yourFragment:

public class YourFragment extends BaseFragmnet 
{ 

    ... 
    . 
    . 

    @Override 
    public boolean onBackPressed() 
    { 
     // do something... 

     return true; // you should return true; 
    } 
} 
0

Vous pouvez garder le drapeau que le tiroir a été ouvert. Et quand vous remplacez la onBackPressed(), vérifiez ce drapeau et s'il est vrai, appelez

reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END); 

autrement, appelez super.onBackPressed() ou toute autre logique dont vous avez besoin.