wake-up-neo.com

Fragment hinzufügen oder ersetzen funktioniert nicht

Ich verwende den Code aus dieser Referenz.

Wenn ich diesen Code in meinem Programm eingebe, erhalte ich eine Fehlermeldung, wie in der Abbildung unten gezeigt.enter image description here

Gründe für den Fehler? The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, ExampleFragments)

Code aus meiner Haupttätigkeit:

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);
    }
}

Hier:

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

Das Problem hier ist, dass Sie Android.support.v4.app.Fragment und Android.app.Fragment mischen. Sie müssen alle Verwendungszwecke konvertieren, um die Unterstützungsbibliothek zu verwenden, was auch den Aufruf von getSupportFragmentManager() bedeutet.

So etwas zum Beispiel:

    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();

Es ist wichtig zu beachten, dass die Unterstützungsbibliothek Fragment und die normale Fragment NICHT austauschbar sind. Sie erfüllen den gleichen Zweck, können jedoch im Code nicht gegeneinander ausgetauscht werden.

162
Eric

Obwohl diese Frage möglicherweise beantwortet wurde, sollte beachtet werden, dass die Lösung für überlappende Fragmente darin besteht, die Fragment-ID zu erhalten (die FrameLayout-ID, wie sie in Ihrer XML-Datei deklariert wird, führt zu Kopfschmerzen) mit einer neuen "Fragment" -Instanz:

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

Ich kann Ihnen nicht sagen, wie viele Stunden ich Post für Post ohne Lösung verbracht habe. Ich habe Ihren anderen Beitrag gelesen, der in den Kommentaren oben verlinkt ist, und ich werde auch dort antworten, nur falls jemand das zuerst findet.

Versuchen Sie dies auch für diejenigen, die eine ClassCastException erhalten. Sie können alle richtigen Bibliotheken hinzufügen, indem Sie FragmentActivity anstelle von Fragment verwenden, und getActivity (). GetSupportFragmentManager im Code verwenden, um Fehler in einem ListFragment zu stoppen, und Sie haben immer noch Probleme mit Fragments. Google-Dokumente zeigen Ihnen nicht alles, und der Eclipse-Code wird Sie nicht immer retten ... Manchmal müssen Sie den Fehler nur selbst beheben.

6
whyoz

Das hat für mich funktioniert

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

0
Mudasar

Versuch es

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

Egal was ich ausprobierte (einschließlich der hier geschriebenen), ich konnte dieses Problem nicht lösen, bis ich diese Antwort sah

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

0
Alpaslan