Fragment wechsel bei onItemClick bei Liste

  • Guten Abend :)


    ich habe eine Activity in der ich links eine Liste als Navigation habe. Beim Klick auf ein Listenelement möchte ich dass das Fragment gewechselt wird.
    Meine Methode zum Wechseln der Fragmente sieht so aus:


    Das zugehörige Layout sieht so aus:


    Mein Problem ist nun, dass auf biegen und brechen der Fragmentwechsel nicht funktioniert. Ich sehe pausenlos nur das FrameLayout egal wie oft ich auf ein item klicke.
    Die Methode ChangeFragment wird aufgerufen, das habe ich anhand einer Log-Ausgabe bereits sichergestellt. Ich habe sämtliche Tutorials gewelst und überall wird es auf die selbe Weise gemacht wie bei mir. Hat jemand von euch eine Idee woran es liegen kann?


    VG.
    ChampS

  • Hast du das mal gelesen?


    https://forums.xamarin.com/dis…icking-on-a-listview-item


    Er hat die Lösung selbst gefunden im zweiten Beitrag.


    Zitat

    I was able to resolve my issue by doing the following :
    Changing my Fragment class to a ListFragment class
    Setting my ViewPager as a property
    Using the ViewPager property to setCurrentItem to the next ListFragment class


    Ansonsten finde ich im Allgemeinen nur so etwas:


    http://stackoverflow.com/quest…-fragments-during-onclick


    http://stackoverflow.com/quest…ent-with-another-fragment
    (hier steht noch ein dritter Parameter, welches an die replace-Funktion übergeben wird - dies wird jedoch eher optional sein, denke ich)

  • Genau wie deine letzten Beispiele, sieht ja mein Code aus. Deswegen verwirrt es mich so, das es nicht funktioniert.


    Im Prinzip ist das halt eine Navigation, links eine liste, rechts das fragment. Das heißt die linke Seite kann nicht als ListFragment gestaltet werden. Das Schlimme ist ja, fast der selbe Code wie in meinem ersten post, hat in einer anderen App schon funktioniert. Da war der einzige unterschied das es eine expandableListView war und nicht nur wie hier eine ListView.


    Am Ende ist das nur wieder ein total trivialer Fehler, wie immer *gg*

  • Was haben die üblichen Prüfungen ergeben?


    (Wert von Transaction und Fragment zur Laufzeit, Aktuell geladenes Layout kennt wirklich R.id.fragment_detail, etc.pp.)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Laut Doku soll FragmentTransaction.replace() dieselbe Instanz der FragmentTransaction zurückgeben, damit Du die Aufrufe fein aneinander ketten kannst.
    Meinst Du den Rückgabewert von FragmentTransaction.commit()?
    In dem Fall empfinde ich -1 als falschen Wert:

    Zitat

    Returns the identifier of this transaction's back stack entry, if addToBackStack(String) had been called. Otherwise, returns a negative number.

    Du hast eindeutig addToBackStack() aufgerufen, ergo halte ich -1 für falsch.


    Weiterhin sagt commit() nur aus, dass das System die Anzeige vornehmen darf, wenn es denn im Runloop des Mainthreads das nächste Mal dazu kommt.
    Passiert das alles auf dem Mainthread? Kannst Du spaßeshalber nach diesen Methoden noch irgendwie am UI rumändern, ob sich da was ändert?


    (Also statt des Fragmentwechsels hart dem FrameView ein erzeugtes Subview hinzufügen oder sowas.)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Sorry für die verwirrung.


    Ja ich meinte den Rückgabewert von commit und das habe ich getestet bevor ich das addToBackStack genutzt habe, daher war -1 zu diesem Zeitpunkt ok. (Es hat sich seit dem nix außer dem addToBackStack() geändert).


    Ich schau heute abend nochmal was der hirarchy viewer mir zu sagen hat. Ich vermute dass das Fragment durch das replace schon eingefügt wird aber das FrameLayout einfach vorhanden bleibt und dieses überlagert. Das sollte im Hirarchy Viewer zu sehen sein.


    Das mit dem Subview werde ich auch nochmal testen.


    Thx :)

  • Ich weiss nicht ob das hilfreich ist aber was für eine Art von Fragment benutzt du um diese mithilfe des FragmentManagers zu tauschen?


    Ich habe die Erfahrung gemacht das ich android.app.Fragment benutzen muss wenn ich diese auf einem FrameLayout austauschen möchte und android.support.v4.app.Fragment wenn ich diese z.B. auf ein ViewPager setzen möchte.


    So sieht mein Code zum tauschen der Fragmente aus...

    und so meine passende XML...



    Ich hoffe irgendwas hilft dir... :) :)

  • Mein Fragment erbt aus der Support Library, in meiner App wo dieses Replace funktioniert ist das Fragment auch aus der Support Library. Aber ich schau mal nach ob ich da vielleicht unterschiede finde, thx :)


    Wie ich vermutet habe, wird das Fragment schon hineingeladen, wie in den angehängten bildern zu sehen.
    Nun muss ich mal sehen ob vielleicht der Inhalt einfach nur invisible ist oder 0 breit. Aber vorweg, ich hatte die Liste und das FrameLayout bereits auf eine feste Breite gesetzt um das auszuschließen und es hat nichts gebracht.


    Mal sehen was ich noch finde.
    LG.

  • wie mir scheint wird das eingefügte element mit einer höhe von 0 eingefügt. Aber ich finde niergendwo einen Grund dafür :(


    Edit: Bug gefixt
    Wie ich vorausgesagt habe, der Fehler war ein trivaler sinnloser dummfehler meinerseits.
    In meinem zu ersetzenden Fragment hatte das Container Layout eine Höhe von 0 statt einer Breite von 0. Komischerweise wurde es auf dem Smartphone trotzdem angezeigt (vermutlich passt der ViewPager seine kinder automatisch mit der größe an).
    Deswegen hab ich einen solchen Fehler nicht vermutet.

  • Ich hatte gestern mal wieder zeit mich hinzusetzen und kurz zu testen ob die app denn nun funktioniert. Hirarchy Viewer zeigt nun zwar die höhe der elemente an (also hats anscheinend was gebracht), angezeigt wird mein fragment dennoch noch nicht.
    Wenn ich heute etwas zeit finde (wenn das hexen kokeln wegen regen ausfällt), versuch ich mal weiter das Problem zu ergründen


    Edit:
    Also Problem gefunden. Man sollte niemals in dem Fragment selbst eine Höhen oder Breitenangabe tätigen. Da der ViewPager das anzuzeigende Fragment selbst nochmal in der höhe und breite anpasst, wurde auf dem smartphone alles ohne probleme angezeigt. Da ich den Fragmentwechsel beim Tablet selbst durchgeführt habe, wurde die automatische breiten und höhen anpassung nicht von android durchgeführt.

Jetzt mitmachen!

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