ViewPager2 onBindViewHolder funktioniert nicht richtig

  • Moin,


    ich habe in dem ViewPager2 mit TabLayout einen Recyclerview. Um in den die Daten einzuspeisen benutze ich einen Adapter (ViewPagerAdapter). Sobald die Daten in dem RecyclerView drin sind, ist die Interaktion mit den Daten kein Problem. Problematisch wird aber die erste Ebene, der richtige Umgang mit dem ViewPagerAdapter. Wenn ich in der tabbed Ansicht bin und den Tab wechsel, wird sofort der Adapter für die restlichen Tabs erzeugt und die Daten werden nur auf dem letzten Tab aktualisiert.


    Hier ist meine Activity, die den ViewPagerAdapter implementiert;




    Das ist der ViewPagerAdapter:
    Beim debuggen habe ich rausgefunden, dass beim ersten Tabwechsel (danach nicht mehr) direkt der onBindViewHolder ausgeführt wird.



    Das Endeffekt sieht so aus:


    https://gifyu.com/image/qVjy


    Hat jemand eine Idee wie man den ViewPagerAdapter anbinden muss oder was ich falsch mache?


    (Es ist für mich sehr wichtig die Antworten zu erklären, denn ich möchte eine Lösung, aber ich möchte es auch verstehen)

  • Zitat

    Wenn ich in der tabbed Ansicht bin und den Tab wechsel, wird sofort der Adapter für die restlichen Tabs erzeugt und die Daten werden nur auf dem letzten Tab aktualisiert.


    Das ist das Normale Verhalten eines Viewpager. Es werden immer die Nachbar Layouts vorgeladen. Damit sie beim Swype auch schon angezeigt werden können. denn es gibt ja einen Moment wo beider Fragmente zu hälfte sichtbar sind. Somit muss das Layout auch schon im Speicher sein.
    Beim sichtbar werden des Fragments wird nicht die onCreateView durchlaufen.
    Beim sichtbar werden, werden die Nachbar Fragment durchlaufen und in den Speicher geladen.

  • Hallo dazu solltest du dir mal das ViewModel Modell anschauen.
    https://developer.android.com/…3d5QqOEAAYASAAEgK5S_D_BwE
    hier ein einfaches Beispiel was auf der Grundlage des vom Studio erstellten Bottom Menu beruht.
    Ich habe nur in dem Dashboard Fragment ein Edittext und Button hinzugefügt der in das MainViewModel schreibet.
    Im Noti Fragment habe ich eine Textview hinzugefügt die den Inhalt aus dem MainViewModel liest und in dem Text anzeigt.
    Beachte das du beim zugriff auf die ViewModels immer den richtigen Kontext brauchst.

  • Mir ist nur immer noch nicht klar, warum die results von dem ersten Tab auf dem dritten Tab angezeigt werden. Und umgekehrt

    das solltest du nochmal genauer erlären und zeigen.



    In deinem video .


    Sieht es genau so aus wie ich es beschrieben habe.


    Du bist in tab 1 wählt etwasaus und willst das an das Nachbar Fragment übergeben. Das nimmt es nicht da die onCrateView nicht durchlaufen wird.


    Du bist in Tab 1 machst eine Auswahl und willst das an Tab 3 übergeben da Tab3 kein direkter Nachbar ist wird wohl die onCrateView durchlaufen und der Intent auch ausgewertet. Da nach dem sichtbar werden des tab 3 die Nachbarn wieder neu geladen werden, wird wohl erst jetzt die Änderungen die du am Tab 2 gemacht hast angenommen da jetzt die onCreatvie von tab 2 aufgerufen wird. Aber angezeigt wird 3.


    das ist ob du es glaubst oder nicht ein klassisches verhalten vom viewpager.



    https://androidwave.com/android-viewpager-with-tabs/
    https://tausiq.wordpress.com/2…ck-in-each-viewpager-tab/

Jetzt mitmachen!

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