GridView anzeigen von position, erstes Kind verschiedene
Android GridView
ist Recht interessant, es verwendet die untergeordneten Ansichten. Diejenigen hochgescrollt kommt wieder von unten. Es gibt also keine Methode von GridView
auf das Kind den Blick von seiner position. Aber ich wirklich brauchen, um Blick durch seine position und tun einiges an Arbeit auf Sie. So zu tun, erstellte ich eine SparseArray
und Ansichten von Ihrer position in der it von getView
von BaseAdapter
.
SparseArray<View> ViewArray = new SparseArray<View>();
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null)
view = li.inflate(layoutID, null);
ViewArray.put(position, view);
}
Nun, ich kann alle sichtbaren Ansichten von Ihrer position. Alles funktioniert perfekt, wie es sollte, aber in einigen Geräten, das erste Kind anzeigen(position 0) ist nicht dieselbe wie die, die in der Reihe. Protokolliert das ich getView
und festgestellt, dass für die position 0, getView
habe viele Male aufgerufen, und jedes mal array war mit verschiedenen anzeigen. Ich habe keine Ahnung, warum GridView-Steuerelement ruft getView
für die position 0, um ein Vielfaches und das passiert nur auf wenigen Geräten. Jede Lösung ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach dem Lesen Quelle
getPositionForView
, ich schrieb diese Methode in eigenen GridView, funktioniert perfekt von API-18Sie nicht erreichen können, der Blick direkt, weil das recycling. Die Ansicht an position 0 und kann wieder verwendet werden, die für die position 10, so können Sie nicht sicher sein, dass die Daten in einer bestimmten Ansicht.
Dem Weg zu gehen, ist die Verwendung der zugrunde liegenden Daten. Wenn Sie brauchen, um Daten zu ändern an der position 10, dann tun Sie es in der Liste oder dem array unter Ihren adapter und rufen
notifyDataSetChanged()
auf den adapter.wenn Sie brauchen, um verschiedene sichten für unterschiedliche Daten-Subtypen, können Sie überschreiben die beiden folgenden Methode in Ihrem adapter:
getItemViewType()
undgetViewTypeCount()
Dann, in
getView()
können Sie 1) entscheiden Sie, welches layout zum aufblasen 2) wissen um die Art der Ansicht wiederverwertetgetItemViewType()
Ein Beispiel finden Sie hier:
https://stackoverflow.com/a/5301093/990616
Es wurde ein Problem berichtet, für diese. Hier ist die link. Dieses Problem wurde geschlossen WorkingAsIntended. Wünschen heißt, wir können erwarten, dass die GridView zu nennen getView() auf pos 0 mehrmals.
Meiner Arbeit um ist wie folgt:
Was ich versuche zu tun, hier ist wieder das gleiche '
convertView
' und wenn die gleiche pos-immer wieder genannt wird. Da durch verhindert werden, dass sich die Logik innerhalbgetView()
(z.B. Einstellung, image-anzeigen, etc)ausgeführt werden, wieder und wieder.