J'utilise le code de cette référence .
Lorsque je mets ce code dans mon programme, je reçois une erreur comme le montre l'image ci-dessous .
Des raisons de 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 la Fragment
normale ne sont PAS interchangeables. Ils atteignent le même objectif, mais ils ne peuvent pas être remplacés par un code.
Bien que l'on ait peut-être répondu à cette question, il convient de noter que la solution au chevauchement des fragments consiste à obtenir l'ID de fragment (en réalité, l'ID de FrameLayout déclaré dans votre code 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é poste après poste sans solution. J'ai lu votre autre article qui est lié aux commentaires ci-dessus et je vais également y répondre au cas où quelqu'un le trouverait en premier.
Essayez également ceux qui reçoivent une ClassCastException
. 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 aurez toujours des problèmes avec Fragments. Google Docs ne vous montre pas tout, et l'achèvement du code Eclipse ne vous sauvera pas toujours ... parfois, il vous suffit de corriger le bogue vous-même !!
Essayez-le
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
Peu importe ce que j'ai essayé (y compris ceux écrits ici), je n'ai pas pu résoudre ce problème avant d'avoir vu cette réponse