111 votes

Le fragment n'est pas remplacé mais posé sur le précédent.

Activité :

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

Fragment1 fragment = new Fragment1();
Fragment2 fragment2 = new Fragment2();

transaction.replace(R.id.Fragment1, fragment);
transaction.addToBackStack(null);
transaction.commit();

FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
transaction2.replace(R.id.Fragment1, fragment2);
transaction2.addToBackStack(null);
transaction2.commit();

Code dans la vue :

<fragment
    android:id="@+id/Fragment1"
    android:name="com.landa.fragment.Fragment1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/include1" /> 

Le problème, c'est que le contenu n'est pas vraiment remplacé, il est placé au-dessus (de sorte qu'il se chevauche).

Lorsque je clique en arrière, le premier fragment s'affiche correctement (sans le second), mais initialement les deux sont visibles (je veux que seul le dernier soit visible).

Qu'est-ce que je rate ici ?

0voto

Volverine Points 75

Dans Oncreate ()

  BaseFragmentloginpage fragment = new BaseFragmentloginpage();
            android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frame, fragment);
            fragmentTransaction.isAddToBackStackAllowed();
            fragmentTransaction.commit();

maintenant, ce sera toujours votre fragment par défaut ... si vous ajoutez un fragment dans la mise en page xml, il se chevauchera toujours, alors définissez le contenu initial avec le fragment au moment de l'exécution.

0voto

Swastik Udupa Points 76

J'ai eu le même problème, mais c'est parce que je n'avais pas modifié la couleur de fond du fragment que j'essayais d'ajouter à mon framelayout.

Essayez de faire ça, avec layout_height y layout_width réglé sur match_parent

0voto

Miguel Pinheiro Points 74

J'ai eu ce problème une fois et j'ai découvert que c'était parce que j'avais accidentellement supprimé la android:background qui manque dans votre code xml. Je crois que ça fonctionne comme lorsque vous peignez un mur, android:background est la couleur que le mur aura et les autres vues sont placées au-dessus de cette couleur de base. Si vous ne peignez pas le mur avant de positionner vos vues, elles seront placées au-dessus de ce qui se trouvait déjà dans ce mur, dans votre cas, votre autre fragment. Je ne sais pas si cela peut vous aider, mais bonne chance.

0voto

Shailesh Points 2029

J'ai essayé ci-dessus tous les cas et essayer de résoudre le problème, mais toujours pas obtenu la solution. Je ne sais pas pourquoi cela ne fonctionne pas pour moi. Je suis d'accord avec les réponses ci-dessus parce que beaucoup sont d'accord avec elle.

Je viens d'étendre la réponse et voici la méthode qui fonctionne pour moi.

J'ai ajouté cette propriété android:clickable="true" dans la disposition parentale supérieure sur fragment.xml fichier.

J'espère que quelqu'un va se faire aider.

0voto

Sandeep Pareek Points 180

Vérifiez l'ID de la disposition du cadre et remplacez-la comme suit

fragmentTransactionChange = MainActivity.this.getSupportFragmentManager().beginTransaction();
fragmentTransactionChange.replace(R.id.progileframe, changeFragment);
fragmentTransactionChange.addToBackStack(null);
fragmentTransactionChange.commit();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X