ListView erweitern Animation für Elemente funktioniert nur nach einem zweiten Klick

8

Ich habe ein CardView mit den folgenden Ansichten:

%Vor%

Wenn ich mein ListView view_2 öffne, wird auf Visible.GONE gesetzt, damit Sie es nicht sehen können. Jetzt habe ich das ExpandAnimation von diesem Blog verwendet. Hier haben Sie den Code:

%Vor%

Ich benutze es in meinem AdapterView :

%Vor%

Ich habe jetzt nur ein Problem: Wenn ich ein Element in meiner Liste zum ersten Mal expandiere, erscheint es sofort ohne Animation und danach funktioniert das Schließen und Öffnen reibungslos mit Animation.

Weiß jemand, warum die erste Öffnung ohne Animation geschieht, aber jeder Klick danach die richtige Animation auslöst?

Ich brauche auch die Animation für den ersten Klick.

BEARBEITEN

Liegt es daran, dass die Sichtbarkeit meiner Ansichten anfänglich GONE ist und die Höhe unbekannt ist? Wenn ja: Wie könnte ich das lösen?

BEARBEITEN 2

Nein, meine XML-Layoutdatei setzt die Ansicht nicht auf GONE :

%Vor%

Ich habe die View.GONE in meinem ListAdapter:

gesetzt %Vor%

Bearbeiten Sie 3

Vielleicht ist es wichtig zu wissen, dass der Container meiner Kartenansichten eine Recycleransicht ist:

%Vor%

Ich brauche wirklich eine Lösung dafür. Es stört viele der benötigten Funktionen.

Bearbeiten 4

Ich habe einige Log-Outputs hinzugefügt:

%Vor%

Wie Sie sehen können, ist die erste marginStart der Erweiterung 0, muss aber -156 sein.

    
Mulgard 27.07.2015, 08:41
quelle

2 Antworten

2

Sie haben Ihren XML-Code nicht angezeigt, aber ich nehme an, Sie haben android:visibility="gone" dort. Wenn ja, sollten Sie es aus der Layoutdatei entfernen (so dass es standardmäßig sichtbar ist). Wenn es weg sein sollte, rufe setVisibility(View.GONE) nach der Inflation an. Auf diese Weise erhalten Sie das gleiche Ergebnis, aber die Ansicht könnte auch ihre Abmessungen erhalten.

    
Marcin Orlowski 31.07.2015 16:44
quelle
2

Wie Ihr Code steht, liest er die Werte für die Ränder, wie Sie sie initialisiert haben, als 0,0.

Sie müssen die Ansicht auf VISIBLE setzen, um Margen zu erhalten, wenn sie auf GONE eingestellt ist, hat sie keine Ränder.

Bestellen Sie Ihren Code so:

%Vor%

Initialisieren Sie diese Variablen nicht.

%Vor%

oder auch das:

%Vor%

Sie müssen nur diejenigen initialisieren, die einen Startwert für Ihren Algorithmus benötigen. Wie Bool Werte.

%Vor%

Ich habe Probleme mit dieser Codezeile:

%Vor%

Ich verstehe nicht, warum Ihr Code mit dieser Zeile keine Warnung oder einen Fehler in Ihrem Logcat anzeigt.

(view.getVisibility() == View.VISIBLE) gibt keinen Wert der Sichtbarkeit zurück.

%Vor%

Es ist kein boolescher Wert. Es kann einen von drei Werten zurückgeben.

Ich schlage vor, es zu ändern:

%Vor%

Durch die Verwendung von GONE wird nur der von dieser Ansicht belegte Speicherplatz reduziert. INVISIBLE behält den von der Ansicht belegten Speicherplatz. Wenn Sie nicht möchten, dass Ihre Layoutelemente in eine bestimmte Position gezwungen werden, würde ich GONE bevorzugen.

Ich hoffe, das hilft, lass es mich wissen.

    
Yvette Colomb 03.08.2015 19:03
quelle