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



我正在使用智能图像视图从互联网下载图像。我把图像放在一个列表视图,它工作得很好,问题开始时,我滚动,应用程序查看以前的图像,过了一段时间,它显示了正确的图像,我想,它不会显示任何东西,直到正确的图像准备好了,我怎么能做到这一点?

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;
} 
}

这是因为Android中的listview被重用来帮助提高性能。SmartImageView的setImageUrl方法需要一些时间来完成,直到它完成

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

上面添加以下行来修复此问题
holder.image.setImageBitmap(null);

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

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

但是你可以使用下面的方法,而不是看到错误的图片:

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

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

最新更新