Tab + ViewPager aktualisiert sich nicht und zeigt seltsame Warnung an erwartete Status 3 gefunden 2

8

Ich habe eine Hauptaktivität, die ein TabLayout mit ViewPager enthält

Ich habe drei Registerkarten hinzugefügt und jede Registerkarte hat separate Fragmente, die eine Recycler-Ansicht enthalten. Diese Recycler-Ansichten haben ein Kontrollkästchen, das gleichzeitig aktualisiert / aktualisiert werden soll, wenn ich den viewpager wische (ich überprüfe Positionen in gemeinsamen Einstellungen und Aktualisierungen) über gemeinsame Präferenz).

Mein Problem hier ist, wenn ich ein Kontrollkästchen in Tab1 ankreuze, wird Tab2 nicht aktualisiert / aktualisiert, bis ich den Recyclerview nach unten scrolle. und Tab3 funktioniert gut. und ich bekomme auch eine seltsame Warnung in logcat.

%Vor%

Mein PagerAdapter

%Vor%

Tablayout OnPageChangelistener

%Vor%

Code für jedes Fragment.

%Vor%     
Rubin Nellikunnathu 05.03.2016, 04:42
quelle

6 Antworten

4

Das FragmentPagerAdapter ruft setUserVisibleHint(true|false) auf Nachbarschaften des aktiven Fragments auf, das den Zustand dieser Fragmente ändert. Dies ist zumindest die Antwort auf die "seltsamen Warnmeldungen", aber es kann Ihr Problem möglicherweise nicht lösen.

In Bezug auf Ihren Kommentar zur Lösung dieser Warnmeldung habe ich meinen eigenen FragmentPagerAdapter wie folgt erstellt:

%Vor%

Die Warnmeldung ist jetzt weg und ich habe derzeit keine Mängel - aber ich bin immer noch mitten in der Forschung.

    
mikes 14.03.2016, 10:59
quelle
2

Ich habe viel Zeit für dieses Problem aufgewendet. Problem ist, dass Sie versuchen, updpager in OnPageChangeListener Listener zu aktualisieren, wird es Warnung

werfen
  

nicht in Zeile aktualisieren

Lösung:

Alle Daten ändern und aktualisieren Ansicht sollte OnPageChangeListener aufrufen, ex: onCreateView des Fragments

Meine Warnung war weg! Und viewpager Update komplett

    
cuasodayleo 03.05.2016 09:24
quelle
2

Es ist spät, aber ich fand einen besten Ausweg mit FragmentPagerAdapter, obwohl es die Warnungen nicht löscht, aber seinen Zweck löst, wenn irgendjemand mir mitteilen kann, was diese Warnung eigentlich bedeutet und was tatsächlich die Warnung auslöst, wäre es mein bestes Interesse.

Zuerst in allen im viewpager verwendeten Fragmenten Methode wie folgt erstellen.

%Vor%

Überschreiben Sie auch die Methode setUserVisibleHint, die in FragmentPagerAdapter verwendet wird, um zu benachrichtigen, ob das Fragment für den Benutzer sichtbar ist oder nicht.

%Vor%

Fügen Sie schließlich in Ihrem Fragment den folgenden Code hinzu, um die Ansicht / das Datum zu aktualisieren, wenn das Fragment sichtbar ist.

%Vor%

Dann implementieren Sie dies in Ihrem TabFragment oder Aktivität

%Vor%

Dies sorgt dafür, dass die Daten konsistent aktualisiert werden, entweder Sie streichen oder Sie klicken auf den Tab. Wenn jemand Probleme oder Fehler findet, kommentieren Sie bitte und lassen Sie mich wissen oder fühlen Sie sich frei, die Lösung zu bearbeiten

Und ich habe für die obige Lösung gestimmt, die mir den Ansatz gab, diese Lösung anzuwenden. Danke @mikes

    
PravinDodia 27.05.2016 23:09
quelle
2

Es ist nicht wichtig. Es ist nur eine Warnung. Bitte versuchen Sie, den Hintergrund von ViewPager layout auf null zu setzen (nicht den Hintergrund).

    
Bipin Bharti 19.04.2016 05:53
quelle
2

In der Ansicht Pager benachbarte Registerkarten werden gleichzeitig geladen. Ihre Aktionen in Tab 1 werden daher nicht in Tab 2 angezeigt, da sie bereits geladen sind. Sie sollten Broadcast-Empfänger verwenden, um dieses Problem zu beheben. Übertragen Sie ein Ereignis in Tab 1 und empfangen Sie das Ereignis in Tab 2

    
Sachin Thampan 08.06.2017 19:28
quelle
1

Die "W/FragmentManager: moveToState: … expected state 3 found 2" Warnung kann ignoriert werden und wurde in Support Library v24.0.0 entfernt.

Zitat von der offiziellen Entwickler Antwort :

  

Sie müssen nichts zusätzlich tun; Dies ist nur eine Informationsprotokollnachricht.   [...]

     

Das Protokoll selbst, wie hier beschrieben, beeinflusst das Verhalten nicht. Bitte öffnen   ein neuer Fehler, wenn Sie andere Probleme haben; verschiedene Probleme zusammenführen   im selben Fehler macht es schwieriger, diese separaten Probleme zu verfolgen.

     

Schließen von Kommentaren, da das Protokollproblem für eine Zukunft gelöst wurde   freilassen.

    
lejonl 25.07.2016 20:26
quelle