Fragment append ou remplacer ne fonctionne pas

J’utilise le code de cette référence.

Lorsque je mets ce code dans mon programme, je reçois une erreur, comme illustré ci-dessous. entrer la description de l'image ici

Des raisons pour l’erreur? The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, ExampleFragments)

Code de mon activité principale:

 public void red(View view) { android.app.FragmentManager fragmentManager = getFragmentManager(); android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); ExampleFragments fragment = new ExampleFragments(); fragmentTransaction.replace(R.id.frag, fragment); fragmentTransaction.commit(); } 

ExampleFragments.java

 package com.example.learn.fragments; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class ExampleFragments extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.blue_pill_frag, container, false); } } 

Ici:

 package com.example.learn.fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; 

Le problème ici est que vous mélangez android.support.v4.app.Fragment et android.app.Fragment . Vous devez convertir toutes les utilisations pour utiliser la bibliothèque de support, ce qui signifie également appeler getSupportFragmentManager() .

Quelque chose comme ça, par exemple:

  android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); ExampleFragments fragment = new ExampleFragments(); fragmentTransaction.replace(R.id.frag, fragment); fragmentTransaction.commit(); 

Il est important de noter que la bibliothèque de support Fragment et le Fragment normal ne sont PAS interchangeables. Ils atteignent le même objective, mais ils ne peuvent pas être remplacés les uns les autres en code.

Bien que cette question ait pu avoir une réponse, il convient de noter que la solution aux fragments qui se chevauchent est d’obtenir l’ID de fragment (en fait, l’identifiant FrameLayout en déclarant dans votre XML entraînera des maux de tête) avec une nouvelle instance de fragment:

 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = new ExampleFragments(); fragmentTransaction.replace(R.id.frag, fragment); fragmentTransaction.commit(); 

Je ne peux pas vous dire combien d’heures j’ai passé à travers post après poste sans solution. J’ai lu votre autre article qui est lié dans les commentaires ci-dessus et je vais y répondre également au cas où quelqu’un trouverait cela en premier.

Pour ceux qui obtiennent une ClassCastException , essayez ceci également. Vous pouvez avoir toutes les bonnes bibliothèques ajoutées, en utilisant FragmentActivity au lieu de Fragment , et avoir getActivity (). GetSupportFragmentManager dans votre code pour arrêter les erreurs dans un ListFragment et vous rencontrerez toujours des problèmes avec Fragments. Google docs ne vous montre pas tout et la complétion du code Eclipse ne vous sauvera pas toujours … parfois il suffit de réparer le bogue vous-même !!

Peu importe ce que j’ai essayé (y compris ceux écrits ici), je ne pouvais pas résoudre ce problème avant d’avoir vu cette réponse

https://stackoverflow.com/a/5907704/728312

Cela a fonctionné pour moi

android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();