0

J'ai une activité principale qui comprend un SwipeRefreshLayout. L'activité contient fragments.Désactiver MainActivity SwipeRefreshLayout à partir de Fragment

Je souhaite désactiver le SwipeRefreshLayout à partir d'un fragment particulier, étant donné que le mouvement de glissement de la SwipeRefreshLayout interfère avec le mouvement de défilement de la ExpandableListView sur le fragment.

Pour cela, j'ai essayé ce qui suit, sans succès:

sur le Fragment je:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.listfragment, container, false); 

    //...... 
    expListView = (ExpandableListView) v.findViewById(R.id.expandableList); 
    final MainActivity mainAct = (MainActivity) getActivity(); 
    //....... 
    expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
     @Override 
     public void onGroupExpand(int groupPosition) { 
      Log.d("test","Disabled"); 
      //SwipeRefreshLayout is called swipeRefreshLayout on MainActivity 
      mainAct.swipeRefreshLayout.setEnabled(false); 

     } 
    }); 

Après avoir exécuté ce, je peux voir le message journal, de sorte que le swipeRefreshLayout devrait être fixé à faux, mais le geste déroulant pour la SwipeRefreshLayout travaille

+0

Postez votre code d'activité ainsi –

Répondre

2

essayez juste comme:

A partir de votre fragment (coulée):

((MainActivity) getActivity()).disableSwipe(); 

maintenant dans votre activité:

private void disableSwipe(){ 
    swipeRefreshLayout.setEnabled(false); 
} 

chèque this answer pour plus de détails

+0

ok, je vais essayer, merci . – codeKiller

+1

Cela devrait fonctionner, mais je préférerais plutôt la façon d'utiliser [délégation] (https://developer.android.com/training/basics/fragments/communicating.html) –

+0

@LucaNicoletti, je suppose par délégation que vous voulez dire en utilisant un interface ?, pourquoi l'interface serait-elle meilleure que cette solution ?, celle-ci a l'air assez simple et avec très peu de lignes de code. – codeKiller