Android:使用smartImageView滚动下载时图像错误

时间:2015-08-06 13:59:04

标签: android image listview

我正在使用智能图片视图从互联网下载图片。 我将图像放在列表视图中并且工作正常,问题在我滚动时开始,应用程序查看以前的图像,一段时间后它显示正确的图像,我希望它不会显示任何内容直到正确的图像准备好,我该怎么做?

import java.util.ArrayList;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.loopj.android.image.SmartImageView;

public class ListAdapter extends BaseAdapter{

    Activity context;
    ArrayList<Row> List ; 

    public ListAdapter(ArrayList<Row> List, Activity context) {
        this.List    = List;
        this.context = context;
    }

    @Override
    public int getCount() {

        return List.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        LayoutInflater inflater = context.getLayoutInflater();

        if (convertView  == null){
            convertView  =  inflater.inflate(R.layout.custom_row, parent, false);
            holder       =  new ViewHolder();
            holder.image = (SmartImageView) convertView.findViewById(R.id.image);
            holder.name  = (TextView) convertView.findViewById(R.id.name);               
            convertView.setTag(holder);
        }
        else{
            holder = (ViewHolder)convertView.getTag();

        }
        String Name   = List.get(position).getName();
        String image  = List.get(position).getURL();
        holder.name.setText(Name);
        holder.image.setImageUrl(image);


    return convertView;
}
static class ViewHolder {            

    TextView name;
    SmartImageView image;
} 
}

2 个答案:

答案 0 :(得分:0)

这是因为Android中的listviews被重用以帮助提高性能。 SmartImageView的setImageUrl方法需要一些时间才能完成,并将其与之前的图像保持一致,直至完成

您可以通过在holder.image.setImageUrl(image);

上方添加以下行来解决此问题
holder.image.setImageBitmap(null);

答案 1 :(得分:0)

问题是下一页上的图像尚未加载,但第一页上的图像是。 ListAdapter在内部重新使用视图,这意味着它具有固定数量的视图,这些视图使用不同的内容进行设置(通过public View getView(int position, View convertView, ViewGroup parent)。

因此,当新图片已经下载时,SmartImageView很不够智能,无法用占位符替换以前的内容:)

但您可以使用以下method来查看错误的图片:

public void setImageUrl(
    String url,
    final Integer fallbackResource,
    final Integer loadingResource)

e.g。

holder.image.setImageUrl(
    image,
    R.drawable.my_fallback_drawable,
    R.drawable.my_placeholder_drawable);