Darstellung Fragmente

  • Ich habe da mal eine Frage zu Fragmenten...


    Mein "Problem" ist die Darstellung bzw. der Hintergrund bei den Fragmenten.


    Wenn ich ein Fragment öffne will/anzeigen lasse, sieht man das alte Fragment UND das neue in einem bzw. überlappend.
    Dies ist nur der Fall, wenn ich bei dem neuen Fragment keine Hintergrundfarbe angegeben habe.


    Muss ich mit Hintergrundfarben arbeiten bzw. wie kann ich das alte Fragment "ausblenden" (lassen)?


    EDIT:


    Es ist nur das Startlayout zu sehen, alle anderen Fragmente werden ja über .replace ausgetauscht.
    Aber das Layout (bzw. die Test textView), welches angezeigt wird, wenn ich die App starte, bleibt zu sehen.

  • @jogimuc Wenn dass mit dir so weiter geht, müssen wir noch Telefonnummern tauschen ^^ Du bist ja ständig der erste mit Hilfestellungen :) ( Ist nicht böse gemeint, ich finde es gut ;) )


    Also, ein Fragment per Button bzw Menüeintrag tue ich wie folgt


    Code
    fragmentTransaction = getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentBatt()).addToBackStack(null);
                fragmentTransaction.commit();


    DAS funktioniert auch alles soweit.


    Der Menücode:



    Wenn ich aber keinen Hintergrund angebe, ist es so als wenn das neue Fragment transparant angelegt wird.


    Wenn ich dass richtig verstanden habe, funktioniert ein Fragment so, als wenn ich ein Blatt Papier über ein anderes lege und beim Klick auf den Zurück-Button (in meinem Fall), wird das oberste Blatt wieder runtergenommen, richtig?!


    Hier noch die onCreate Methode. FragmentStart habe ich testweise eingefügt, umzuschauen ob das Problem besteht weil sonst die Standard activity_main.xml geladen wird.



    So sieht es beim starten aus :/



    [Blockierte Grafik: https://www2.pic-upload.de/img/35998939/fragment.png]

  • Hallo ich kann da jetzt keinen Fehler erkennen.
    Ich hatte das Problem noch nicht das da etwas durchscheint. Habe auch immer ein einfaches layout gemacht .eine Hintergrund Farbe für das layout Habe ich auch keine angegeben. Und habe immer nur genau das layout was ich lade in Container des Main layout.
    Hast du etwa in dem Container etwa View Elemente. Der Container sollte lehr sein.
    Mit dem addToBackStack(null) bin ich mir nicht sicher denn das mache ich eigentlich nicht. Wenn ich den stack löschen zurücksetzen will . Mache ich das mit popBackStack() .

  • Mit dem addToBackStack(null) bin ich mir nicht sicher denn das mache ich eigentlich nicht. Wenn ich den stack löschen zurücksetzen will . Mache ich das mit popBackStack() .


    popBackStack() wird in der Main bei mir rot hinterlegt und funktioniert nicht.


    Kann es sein das du verschiedene Fragment-Typen benutzt?
    Also in einem Fragment import android.support.v4.app.Fragment; und in einen anderen import android.app.Fragment; ?


    In der MainActivity habe ich gar keinen Fragment-Import :/



    Wenn ich extends Fragment schreibe, kann ich wenn dann nur den import android.support.v4.app.Fragment wählen, der andere Import ist durchgestrichen.


    Und egal welchen Import ich in der Main angebe, ich bekomme Probleme (denke dass liegt am Drawer-Layout) im restlichen Code.
    Von daher habe ich in der Main nichts mit extends Fragment angezogen.


    In den anderen Fragmenten wird mit import android.support.v4.app.Fragment; importiert.

  • hi also popBackStack() ist eine Methode des framentmanager.


    Erstelle einzelne variablen Und nicht alles hintereinander.
    Dann geht das auch.


    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();fragmentManager.popBackStack();


    damit löschst du den backstack für die zurück taste allgemeinen braucht man das nicht. Deine Variante ist auf jeden Fall sinnlos.Etwas hinzufügen und null angeben kann nicht geh'n.

  • Code
    fragmentManager = getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction().replace(R.id.container, new FragmentBasic());
    fragmentManager.popBackStack();
    fragmentTransaction.commit();

    So habe ich es jetzt mal gemacht. Die Überlappung habe ich immer noch und - wie erwähnt - bei Klick auf den Zurückbutton wird die App verlassen.


    Dass man jedes Mal aus der App geht wenn man auf den Zurückbutton klickt, soll nicht passieren. Aber soweit bin ich noch nicht,
    erstmal muss ich die Überlappung weg :)

  • das du zurück gehst ist ja klar du löschst ja auch den backstack das wolltest du ja auch.
    Was hast du eigentlich für ein Projekt erstellt?
    Ich denke ein Standard mit Nachfrager oder?


    In der Mainactivity und somit in der oncreate musst du ein Fragment mit add laden und den echo Net nur mit replace austauschen.
    Denn backstck kannst bereinigen musst du Aber nicht kommt darauf an was du für ein verhalten brauchst..


    Frage was ist new FragmentBasic() ist das die klasse was du austauschen möchtest. Also dein Fragment welches du neu einsetzen willst. Welche Klasse Fragment ist vorher geladen ?. Und wie sieht den dein Fragment aus und auch wie sieht das layout das du Im Fragment lädst aus?

  • das du zurück gehst ist ja klar du löschst ja auch den backstack das wolltest du ja auch.
    Was hast du eigentlich für ein Projekt erstellt?

    Naja, ganz raus aus der App war nicht der Plan, wenn denn eher dass man zurück auf das Startfragment kommt.
    Ich bastle für mich eine App mit ein paar Schiebereglern, Eingabefelder etc. Ist einfach nur etwas für E-Zigarette, nichts wildes aber für mich ein Ziel zum üben.



    Ich denke ein Standard mit Nachfrager oder?

    ???


    In der Mainactivity und somit in der oncreate musst du ein Fragment mit add laden und den echo Net nur mit replace austauschen.
    Denn backstck kannst bereinigen musst du Aber nicht kommt darauf an was du für ein verhalten brauchst.

    Hatte ich zuerst so gemacht, allerdings war mir nicht klar welches Fragment bzw. hatte ich extra dafür eins erstellt. Dies wollte ich so allerdings nicht haben. Oder ist das Standard?


    Frage was ist new FragmentBasic() ist das die klasse was du austauschen möchtest. Also dein Fragment welches du neu einsetzen willst. Welche Klasse Fragment ist vorher geladen ?. Und wie sieht den dein Fragment aus und auch wie sieht das layout das du Im Fragment lädst aus?

    FragmentBasic ist einfach nur ein leeres Fragment.
    Welches Fragment gerade geladen ist, kommt drauf an welches vorher angeklickt wurde. Oder was meinst du?


    Die MainActivity sieht aktuell so aus:


  • FragmentBasic




    Fragment_basic.xml



    activity_main.xml



    content_main.xml



  • Hi ich dachte es mir schon dein Container ist nicht lehr.
    In dem Content_Main layout hat in dem frame layout nicht drinnen zu stehen das ist ein Lehrer einplatzhalter Container ohne Inhalt.
    Dazu musst du aber auch das erste layout in der onCrate mit add laden bevor du es in deinen navdawer mit replace austauschen kannst, wenn nichts drin ist kann auch nichts tauschen.
    Erstelle dir ein layout was du in der onCreate mit ass lädst. Hatte dir schon mal gesagt das der Container lehrte sein muss.

  • Das mit dem leeren Container habe ich wohl vergessen, davon mal ab ist er ja leer soweit.
    Es war lediglich eine TextView drin um zusehen welches Fragment gerade geladen ist ;)


    Wird ein zusätzliches Layout geladen bzw. per .add hinzugefügt, oder dass neu erstellte über setContent?


    Code
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);


    Jetzt wo ich die TextView rausgelöscht habe, läuft es bzw. schimmert nichts mehr durch. Wie funktioniert dass denn nun mit dem austauschen wenn gar nichts zum austauschen da ist?!
    Schließlich werden ja die Fragmente - die geöffnet werden sollen - angezeigt.

  • Wenn ich das richtig von jogimuc verstanden habe, sollst du (was ich auch immer mache) in der onCreate schon das passende Fragment setzten. (Aber keine Ahnung ob das das Überlappen verhindert. Ich hatte selber damit nie Probleme)
    Also quasi:

  • Hallo ja fast richtig @Xcreen nur in der Zeile 16
    Solltest du erst mal ein Fragment laden und nicht tauschen.denn zu dem Zeitpunkt ist der Container lehr.


    fragmentTransaction.add(R.id.container, fragmentBasic).


    Mit add und nicht replase , im klicklistnet wird dann nur getauscht.


    Auch wenn der Container fast lehr ist nur ein Textviev ist er eben nicht lehr.
    Da brauchst dich auch nicht wundern wenn da was durchscheint.

  • Das mit dem durch scheinen hat weniger mit dem add oder replase zu tun. Sondern damit das er i den Main Layout im Container View Elemente hatte in diesen Layout Abschnitt darf nichts sein was statisch geladen wird denn das kann nicht ausgetauscht werden nur frage te die dynamisch geladen werden. Habe ich aber nun auch zur genüge erklärt.

Jetzt mitmachen!

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