web-dev-qa-db-fra.com

Fragment ajouter 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 le montre l'image ci-dessous .enter image description here

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;
54
EGHDK

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.

162
Eric

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 !!

6
whyoz

Essayez-le

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
0

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

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

0
Alpaslan