58 votes

Fragment d'ajouter ou de remplacer la pas de travail

Je suis en utilisant le code à partir de cette référence.

Quand je l'ai mis dans ce code dans mon programme, j'obtiens une erreur comme on le voit dans l'image ci-dessous. enter image description here

Les 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;

167voto

Eric Points 28561

Le problème, c'est que vous êtes en mélangeant android.support.v4.app.Fragment et android.app.Fragment. Vous avez besoin de convertir toutes les utilisations à utiliser la bibliothèque de prise en charge, ce qui signifie également l'appelant getSupportFragmentManager().

Quelque chose comme ceci, 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 prise en charge Fragment et de la Fragment ne sont PAS interchangeables. Ils permettent d'atteindre le même but, mais ils ne peuvent pas être remplacé par un autre dans le code.

8voto

whyoz Points 1308

Bien que cette question peut avoir été entendu, il convient de noter que la solution de chevauchement des fragments est d'obtenir le fragment ID (en fait la FrameLayout id déclarer dans votre xml va conduire à des maux de tête) avec un nouveau "Fragment" de l'instance:

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é en passant par post après post avec pas de solution. J'ai lu ton autre post qui est liée dans les commentaires ci-dessus et je vais répondre là juste au cas où quelqu'un trouve que la première.

Pour ceux qui obtiennent un ClassCastException, essayez ceci. Vous pouvez avoir toutes les bonnes librairies ajouté, en utilisant FragmentActivity au lieu de Fragment, et ont getActivity().getSupportFragmentManager dans votre code pour les erreurs d'arrêt dans un ListFragment et vous aurez toujours des problèmes avec les Fragments. Google docs ne pas tout montrer, et Eclipse de complétion de code ne sera pas toujours vous sauver...parfois vous avez juste à corriger le bug-vous!!

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