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.
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;
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.
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.
Das hat für mich funktioniert
Android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
Versuch es
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
Egal was ich ausprobierte (einschließlich der hier geschriebenen), ich konnte dieses Problem nicht lösen, bis ich diese Antwort sah