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.

Sie zeigen nicht den code für die 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

Schreibe einen Kommentar