ListView Ändern Der Elemente In Blättern
Ich die Umsetzung ein ListFragment mit einer benutzerdefinierten ArrayAdapter um die Liste zu füllen. Jedes row-Element hat eine Bildansicht und drei TextViews. Werden Daten analysiert, die über XML und die Bilder sind async geladen.
Das problem, das ich habe ist, dass die ListView füllt und sieht gut aus, aber es gibt ein problem beim scrollen. Ich kann passen 7 Elemente gleichzeitig auf dem Bildschirm. Wenn ich navigieren Sie zu der 8., es ändert sich plötzlich, so dass die nächste Zeile, die nicht angezeigt werden sollte. Es funktioniert nur auf Zeilen, die durch 8 teilbar sind (dh. Zeilen 8, 16, 24, etc).
Ich bin mit dem ViewHolder pattern, um eine gute Geschwindigkeit mit dieser ListView. Ich vermute das problem liegt dort irgendwo, aber ich habe gesucht und es scheint, ich bin dabei diese Muster richtig und ich habe aus der Dinge zu überprüfen, um dieses Problem zu beheben. Was mache ich falsch? Danke!
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder;
if (row == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
row = inflater.inflate(R.layout.browse_result_list_item, null, false);
holder = new MyViewHolder();
holder.adTitle = (TextView) row.findViewById(R.id.adTitle);
holder.region = (TextView) row.findViewById(R.id.region);
holder.time = (TextView) row.findViewById(R.id.time);
holder.thumbnail = (ImageView) row.findViewById(R.id.browseThumbnail);
row.setTag(holder);
} else {
holder = (MyViewHolder) row.getTag();
}
SearchResult result = mObjects.get(position);
holder.adTitle.setText(result.getTitle().substring(0, result.getTitle().length()-3)); //three ... at the end, remove them
holder.region.setText(result.getRegion());
holder.time.setText(result.getPostingTime());
//Download the image thumbnail
ArrayList<String> urls = result.getImageUrls();
if (urls.size() > 0)
download(urls.get(0), holder.thumbnail);
else //No image for this post, put a placeholder
holder.thumbnail.setImageResource(R.drawable.ic_action_picture);
return row;
}
private static class MyViewHolder {
public static TextView adTitle;
public static TextView region;
public static TextView time;
public static ImageView thumbnail;
}
Edit: ich fand die Lösung Dank @frozenkoi. Endete als die statischen Variablen innerhalb der ViewHolder Probleme verursacht. Sie sind jetzt einfach nur public und die Klasse ist statisch und das Problem hat Biene gelöst.
download
Funktion. Wahrscheinlich, wenn Sie sind, scrollen Sie zwei asynchrone downloads update die gleichen ImageView
. Sie müssen sicherstellen, dass, wenn die ListView
recycelt einer Zeile ist der Ansicht, dass es nur dann aktualisiert, um den korrekten downloader und nicht für die downloader bedeutete für die Zeile wurde die Ansicht vertreten, vor.Möglicherweise ein Duplikat von stackoverflow.com/questions/16540582/...
Sollten Sie diesen Satz Lesen, "es ändert sich plötzlich der nächsten Zeile, die nicht angezeigt werden sollte." statt? Können Sie ein kleines Beispiel für den Effekt? 1 2 3 4 5 6 7 wird was?
Mehr Infos über lazy-laden von Bildern in einer Liste oder grid-Ansicht: stackoverflow.com/questions/541966/...
überprüfen Sie dieses, ob es hilft stackoverflow.com/questions/16789676/.... Lazy Loading
InformationsquelleAutor Staulkor | 2013-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst definieren Sie in
getView()
Methode inconvertView=null;
und Kommentar sonst Bedingung, die in dieser Methode, und fügen
int type = getItemViewType(position)
;.Auch das entfernen von static-Schlüsselwort von jedem Element Anzeigen wie
Textview, ImageView
im ViewHolder Klasse.Tun Sie es jetzt!
Fertig!
InformationsquelleAutor Jaydip Radadiya
Ich die Lösung gefunden Dank @frozenkoi. Endete als die statischen Variablen innerhalb der ViewHolder Probleme verursacht. Sie sind jetzt einfach nur public und die Klasse ist statisch und das Problem wurde gelöst.
The member type ViewHolder cannot be declared static; static types can only be declared in static or top level types
InformationsquelleAutor Staulkor
Nur fügen Sie diese Zeilen in den code-adapter-Klasse.
Hoffe, es wird Ihr problem lösen.
InformationsquelleAutor androidcodehunter
Problem kommt nur auf, wenn viewholder Variablen definiert sind statische.
Ansonsten listview-Steuerelement funktioniert gut mit oder ohne viewholder in Blättern.
InformationsquelleAutor Ajesh Gupta
In meinem Fall wieder vergessen wurde in
if else
Zustand:ViewHolder
InformationsquelleAutor afshin