2017-09-08 10 views
0

Je souhaite modifier dynamiquement la visibilité de fragment1 lorsque l'utilisateur clique sur button sur Main Activity. fragment1 est initialisé comme visible mais lorsque le bouton est enfoncé, fragment1 devient caché.Modifier dynamiquement la visibilité du fragment

J'ai lu qu'il est dangereux de changer la visibilité des fragments dans une activité et par la suite devrait être soit traité avec Fragment Manager par exemple.

FragmentManager fragmentManager = getFragmentManager(); 
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    final fragment_one fragment1 = new fragment_one(); 
    fragmentTransaction.add(R.id.fragment_container, fragment1); 
    fragmentTransaction.show(fragment1); //or .hide(fragment1); 
    fragmentTransaction.commit(); 

Cependant, je crois comprendre que, une fois le fragment est engagé, il a été effectivement initialisées et ainsi de changer son état, il a besoin d'être remplacé et donc aller à travers le processus ci-dessus? Cela semble incroyablement lourd de changer quelque chose de préliminaire.

Évidemment, le bouton doit être dans le Main Activity sinon, s'il était possible de basculer entre les états de visibilité, il sera impossible de revenir d'un état invisible à un état visible. Dans cet esprit, j'ai implémenté ce qui suit, mais cela n'a aucun effet sur le fragment - ce que je soupçonnais d'avoir déjà commis le fragment. NB: Ce qui suit est dans la méthode onCreate dans Main Activity après avoir validé le fragment qui a été détaillé ci-dessus.

Tout conseil serait grand merci.

Button btn = (Button) findViewById(R.id.btn); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      fragmentTransaction.hide(fragment1); 
     } 
    }); 

Répondre

0

Ce fut une question d'un beaucoup plus grand problème que je faisais face à un fragment animant imbriqué avec ObjectAnimator et sa visibilité puis faire basculer.

Pour quiconque essayant de basculer la visibilité du fragment, il semble que vous ne pouvez changer le changement d'affect que sur les ViewGroup inclus dans les arguments pour fragmentTransaction.add(R.id.fragment_container, fragment1);. Dans ce cas, il aurait été fragment_container. Comme c'est le rootView, changer cela était suffisant car je voulais que la carte entière disparaisse.

À noter également que c'était supposé être un fragment d'enfant. Par conséquent, l'utilisation de getFragmentManager était incorrecte. J'ai évité getChildFragmentManager parce que je recevais une série d'erreurs qui devenaient de plus en plus complexes. Après avoir changé le ViewGroup que j'ajoutais mon fragment enfant (l'a changé en FrameLayout dans le parent Fragment), cela a été rapidement résolu.