Fragmente (per Button) austauschen?

  • Hey Zusammen,


    ich bin gerade dabei ein "Testspiel" mit Fragmenten zu basteln
    um dass ganze mal etwas besser kennenzulernen usw.


    Da ich mich damit so nicht so richtig auskenne, komme ich gerade nicht so richtig weiter und habe hierzu ein paar Fragen.


    Wie genau läuft es mit dem FragmentManager? Wird dieser nur einmal in der Main erstellt und ich kann immer auf diesen zugreifen, oder muss ich diesen quasi für jedes Fragment neu erstellen?



    Momentan sieht es bei mir wie folgt aus, ich habe folgende Klassen:


    - MainActivity
    - StartFragment
    - GameFragment
    - GameOverFragment
    - HighscoreFragment


    In der MainActivity (hier ist auch das FrameLayout "container" gesetzt) steht drin:


    Hier wird gleich das StartFragment (mit einem Menü) angezeigt.


    StartFragment


    Dass hier im StartFragment ist der letzte Code den ich getestet habe - und welcher natürlich auch nicht funktioniert - :/


    Gebe ich in der MainActivity unter onCreate alle Fragmente an, legt er mir diese alle übereinander und man sieht alles auf einmal.


    Naja, wie dem auch sein ist dies hier erstmal nur "rumgespiele", also zerreißt mich bitte nicht gleich ;) ^^


    Meine Frage nun, wie bekomme ich ein neues Fragment angezeigt (ohne dass das alte durchschimmert), wenn ich z.B. auf den START-BUTTON drücke?


    Ich habe das Prinzip bzw. die genaue Funktion des Managers noch nicht so richtig verstanden. Vllt. kann mir dass ja mal einer für Blöde erklären :/


    Vielen Dank im voraus.


    P.S. Der Code wird zu 100% nicht korrekt sein, und garantiert optimierungsfähig sein, aber wie gesagt, ICH lerne noch :) Selbstverständlich freue ich mich über jeden Ratschlag/Tipp oder Trick :)




    EDIT:


    Ich habe gerade nochmal ausprobiert und getestet. Habe folgendes im onClickListener eingefügt,



    Code
    FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                GameFragment fragment = new GameFragment();
                fragmentTransaction.replace(R.id.container, fragment);
                fragmentTransaction.commit();


    und NUN wird gewechselt. So habe ich mir dass gedacht. Nun kann ich weiterspielen ^^


    P.P.S Gerne kann mir aber noch einer erklären (immer noch für Blöde :P ) wie der dass so abläuft mit Fragmenten bzw. dem Manager :)

  • Hallo
    Deine MainActivity sieh soweit gut aus nur die Zeilen 19-23 brauchst du nicht wirklich denn du willst nicht aus der Main die Fragmente aufrufen.



    Zu deiner FragmentKlasse „StartFragment“
    Die Button würde ich in der onActivityCreated erstellen. Und zwar alle die du brauchst, nicht in der onCreateView.
    btnStart = getActivity().findViewById(R.id.btn_start);
    btnStart.setOnClickListener(this);



    Frage was soll diese Zeile Nr 54 „if (v.findViewById(R.id.container) == null){„
    Wenn du prüfen möchtest ob ein bestimmtes Layout geladen ist. Damit es z.B. nicht noch mal geladen wird, dann musst du nach der ID des Layout prüfen nicht nach dem Container.



    Du brauchst keinen neuen fm erstellen hole dir den aus der Main. Bei der Arbeit mit Fragmenten wird deine Main nicht beendet ein Fragment kann nicht alleine laufen nur innerhalb einer Activity/FragmentActivity.
    fragtrans = getActivity().getFragmentManager().beginTransaction();
    Habe deinen Code etwas verändert denke so müste es gehen. Kann leider nicht Testen habe hier kein AS.


  • Oha, cool. Dass ist ja einwenig mehr Antwort wie ich erwartet habe :) Ich danke dir.


    ALSO...


    die Zeilen in der Main sind dort jetzt nur testweise gewesen, sind schon wieder raus. Hatte gedacht dass sich damit das ganze ändert und funktioniert :)


    ...genauso die Zeile mit der if-Anweisung. Das war ein Codeschnipsel welchen ich im Internet gefunden hatte auf der Suche nach einer Lösung. War auch nur zum testen.


    Ansonsten werde ich deinen Code mal ausprobieren und danke dir vielmals für die Antwort.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!