Dynamische Kartenansichten kombiniert mit Firebase

8

Ich habe eine Liste von CardViews . Jedes CardView (das eine Herausforderung darstellt) hat eine ViewPager , um eine vertikal scrollbare Liste von "Lösungen" anzuzeigen.

Die Daten und Bilder in der "Lösungsliste" stammen aus einer Firebase -Datenbank. Das Problem, das ich habe, ist das erste CardView, das Sie öffnen (wenn Sie darauf klicken, wird es erweitert und zeigt die Lösungen an) zeigt alle Lösungen korrekt an. Wenn du auf den zweiten klickst, wird es erweitert, aber es werden keine Daten angezeigt und ich denke, es ist so, weil ich mit einem "endgültigen" Layout arbeiten muss ( final FrameLayout v0 = (FrameLayout) inflater.inflate(R.layout.solutions, null); )

Dies ist ein Ausschnitt der wichtigen Teile des benutzerdefinierten RecyclerView Adapters.

%Vor%

Dies ist die Datei "challenges_row.xml":

%Vor%

und das ist solutions.xml:

%Vor%

Edit mit Hinweis von Marcos: (immer noch dasselbe Ergebnis)

%Vor%     
DeGoosseZ 14.10.2017, 17:16
quelle

2 Antworten

0

Die Erklärung von Marcus war mir nicht 100% klar, aber es hat mich zum Nachdenken gebracht und mir geholfen, den Viewpager / Adapter-Link besser zu verstehen. Ich entferne den Cardview Pard und ich meine eine normale Listview mit einem Viewpager hinein. Dies ist eine kurze Version des Codes (einige Teile fehlen!).

In dem Fragment habe ich eine Liste einer benutzerdefinierten Datenklasse erstellt. Jeder Teil der Liste entspricht einer Zeile. Die Liste wird dem benutzerdefinierten Adapter hinzugefügt (Code ist unten), und dieser benutzerdefinierte Adapter wird zur Listenansicht (Meine Liste) hinzugefügt.

Fragment.java

%Vor%

Die Listenansicht in der XML-Datei:

%Vor%

SolutionsAdapter.xml

Ermitteln Sie im Konstruktor den Kontext, damit wir den richtigen Platz auffüllen und die für die Listenansicht benötigten Elemente abrufen können. Füllen Sie das gewünschte Layout innerhalb des Viewpagers auf, weisen Sie die Werte dem Layout zu. Erstellen Sie dann eine Liste für die viewpager-Elemente (myViewpagerlist), geben Sie die Ansicht (convertview) für den benutzerdefinierten Adapter (vpadapter) ein, damit sie sich an der richtigen Stelle aufblasen kann. Erstellen Sie einen neuen Viewpager, fügen Sie das Layoutelement hinzu und fügen Sie den benutzerdefinierten Adapter (vpadapter) hinzu. Füllen Sie die Liste für den Viewpager (myviewpagerlist) und rufen Sie die notifyDataSetChanged () - Funktion auf.

%Vor%

VPAdapter.java Erstellen Sie eine neue Ansicht, weisen Sie ihr die korrekten Daten zu und machen Sie sie fertig.

%Vor%     
DeGoosseZ 25.10.2017, 18:10
quelle
0

Nachdem Sie nun der Lösung gefolgt sind, müssen Sie Folgendes beheben:

%Vor%

Diese Anweisung erstellt eine Ansicht, die nicht mit dem ViewHolder verknüpft ist, und das Ergebnis ist leer.

Ermitteln Sie im ViewHolder-Konstruktor den Verweis des viewpager, der sich innerhalb des Viewholders befindet (nicht der Hauptansicht), und weisen Sie ihm den Eintrag solutionsAdapter zu.

Der SolutionsAdapter wird eine Liste von Objekten enthalten, die Sie an der Stelle der Linie ändern, auf die ich hingewiesen habe.

Der Lösungsadapter stellt Instanzen von holder.myInflater.inflate (R.layout.solutions, null, false) in der Erstellungsansicht bereit und legt die Werte in onBindViewHolder fest.

Zusammenfassung:

Ihr Bildschirm verfügt über einen RecyclerView mit einem Adapter, der eine Ansicht (von Challenges) mit einem ViewPager zurückgibt; Die Objektansicht (von Challenges) benötigt einen Adapter für den ViewPager (von Solutions), den Sie ändern können.

    
Marcos Vasconcelos 18.10.2017 20:03
quelle