J'ai créé plusieurs fragments et j'ajoute le premier fragment de la manière suivante:
mainFragment = (MainFragment) MainFragment.create();
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
.add(R.id.content, mainFragment, MAIN_FRAGMENT_TAG)
.commit();
Le deuxième fragment est ajouté de la manière suivante:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
//.hide(mainFragment)
.add(R.id.content,VenueFragment.create(vid), "Venue Fragment")
.addToBackStack(null)
.commit();
setDrawerIndicatorEnabled(false);
Maintenant que vous voyez que la méthode hide n’est pas appliquée pour cette transaction et que la VenueFragment
est ouverte, le problème dans ce cas-ci est que, même si la VenueFragment
est ouverte (et c’est une vue plein écran), appuyer sur une section vide de ce fragment invoque les appels du MainFragment
vues cliquables. Comment puis-je empêcher cela?
Si j'utilise l'option de masquage, cela ne se produit pas, mais pour une raison quelconque, l'animation permettant de supprimer la variable MainFragment
est en cours et cela crée une expérience étrange.
Vous devez rendre la racine ViewGroup
de VenueFragment
cliquable de sorte qu'elle gère les événements de clic et qu'ils ne soient pas transmis (au sens z) par l'autre Fragment
.
Définissez la propriété cliquable sur la vue du deuxième fragment sur true.
Par exemple:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:clickable="true" />
La définition d'un onClickListener sur VenueFragment fonctionnera, mais j'ajouterai un peu plus d'explications. Avoir le fragment principal un événement tactile est destiné à traiter le cas où le fragment de votre lieu est transparent. Dans ce cas, il peut être raisonnable de s’attendre à ce que le contact passe par votre vue transparente à celle qui se trouve en dessous. En tant que tel, Android transmet les événements tactiles jusqu'à ce qu'ils puissent être gérés. Définir un onClickListener gérera l'événement, l'empêchant d'être transmis à la vue suivante. Si vous voulez être "correct" sur la prévention des clics sur le fragment inférieur, il existe deux options:
Eh bien, la réponse très rapide est Android:clickable="true"
en haut des propriétés de présentation en fragment.
Mais il serait préférable de créer une activité avec un FrameLayout & its id et aucun autre élément dans cette activité. Donc, chaque fois que vous voulez qu'un fragment_ soit à l'écran, appelez cette activité et utilisez
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
.replace(R.id.frameLayoutId, mainFragment, MAIN_FRAGMENT_TAG)
.commit();
utilisez replace au lieu de add pour que le frameLayout du activité soit remplacé par la disposition du fragment telle que donnée par le frameLayoutId
J'ai une meilleure solution, du moins c'est ce que je pense: P.
pendant la fragmentation, utilisez la méthode hide and show.