2017-03-01 4 views
0

Ich habe eine Activity mit einem Fragment, das eine ListView zeigt, die einfach TextViews enthält. Ein Menüpunkt kann über einen Intent einen weiteren Activity auslösen. Diese neue Activity löscht die ArrayList, die der ArrayAdapter für die ListView unter Verwendung ArrayList.clear() zugrunde liegt.Android ListView.getChildCount() größer als getCount()

Wenn ich ein Backup von den neuen Activity zu meinem ursprünglichen einem mit den ListView, und den vollen Kontrolle in onResume() finde ich, dass meine ListView.getChildCount() ist das gleiche wie wenn es aufgrund der Absicht verlassen wurde, aber die ListView.getCount() ist jetzt richtig Null !

Ich habe versucht, mit der clear() Methode des Adapters, habe ich versucht Adapter.notifyDataSetChanged() (obwohl ich nicht muss).

Wenn ich die zugrunde liegende ArrayList aus dem Fragment selbst ändern, scheint alles in Ordnung. Wenn Sie beispielsweise auf ein Element klicken, können Sie es entfernen, nach oben oder unten verschieben usw. Das funktioniert einwandfrei.

Auch, wenn ich dann die Liste Activity verlassen und wieder darauf zurückkommen, ist alles in Ordnung. Die ArrayList ist also eindeutig dieselbe Liste. Ich erstelle nie nur eine neue Liste. clear() es.

Eine Idee, wie die Child Count möglicherweise mehr als die zugrunde liegende Elementanzahl sein kann? Vielleicht löst eine Art Beobachter für die ArrayList nicht aus, weil die Activity ausgesetzt ist? In welchem ​​Fall könnte ich sie wieder synchronisieren? Ich habe versucht invalidate() zum Beispiel.

Dies ist unter API 23.

Antwort

-1

Ich scheine eine Abhilfe gefunden zu haben. Ich bemerkte einen anderen Beitrag here Thread Sicherheit diskutieren. Es scheint Auswirkungen zu haben, wenn Sie Ihre Liste nicht von der ursprünglichen Benutzeroberfläche aus ändern. Also, in meiner onResume(), habe ich gerade einen setAdapter() erneut gemacht. Mit dem gleichen Adapter und Liste und Viola! Alles scheint wieder gut zu sein.