Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上下滚动时,listview中的android ImageView不显示图像_Android_Android Listview - Fatal编程技术网

上下滚动时,listview中的android ImageView不显示图像

上下滚动时,listview中的android ImageView不显示图像,android,android-listview,Android,Android Listview,我通过universalImageDownloader从互联网上获取图像,并使用ViewHolder显示这些图像: public class ListAdapter2 extends BaseAdapter { Activity activity; public ArrayList<HashMap<String, String>> list; public ListAdapter2(Activity activity, ArrayList<

我通过universalImageDownloader从互联网上获取图像,并使用ViewHolder显示这些图像:

public class ListAdapter2 extends BaseAdapter {
    Activity activity;
    public ArrayList<HashMap<String, String>> list;

    public ListAdapter2(Activity activity, ArrayList<HashMap<String, String>> list) {
        super();
        this.activity = getActivity();
        this.list = list;
    }

    public HashMap<String, String> geting(int position) {
        return list.get(position);
    }

    public void addAll(ArrayList<HashMap<String, String>> result) {
        if (this.list == null) {
            this.list = result;
        } else {
            this.list.addAll(result);
        }
        notifyDataSetChanged();
    }

    public int getCount() {
        return list.size();
    }

    public Object getItem(int position) {
        return list.get(position);
    }

    public long getItemId(int arg0) {
        return 0;
    }

    private class ViewHolder {
        ImageView img;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        LayoutInflater inflater = activity.getLayoutInflater();
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.row_grids, null);
            holder = new ViewHolder();
            holder.img = (ImageView) convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        item = list.get(position);

        if(item.get("img").length()>0)
            imageLoader.displayImage("http://website.com/img/" + item.get("img"), holder.img, options,
                imageListener);
        else
            holder.img.setImageDrawable(getResources().getDrawable(R.drawable.fix));
        }

        return convertView;
    }

    public void clear() {
        if (this.list.size() > 0)
            this.list.clear();
    }
}

private static class ImageDisplayListener extends SimpleImageLoadingListener {

    static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        if (loadedImage != null) {
            ImageView imageView = (ImageView) view;
            boolean firstDisplay = !displayedImages.contains(imageUri);
            if (firstDisplay) {
                FadeInBitmapDisplayer.animate(imageView, 500);
                displayedImages.add(imageUri);
            }
        }
    }
}
公共类ListAdapter2扩展了BaseAdapter{
活动;
公共阵列列表;
公共列表适配器2(活动活动,ArrayList列表){
超级();
this.activity=getActivity();
this.list=列表;
}
公共哈希映射获取(int位置){
返回列表。获取(位置);
}
公共void addAll(ArrayList结果){
if(this.list==null){
this.list=结果;
}否则{
this.list.addAll(结果);
}
notifyDataSetChanged();
}
public int getCount(){
返回list.size();
}
公共对象getItem(int位置){
返回列表。获取(位置);
}
公共长getItemId(int arg0){
返回0;
}
私有类视窗持有者{
图像视图img;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
LayoutInflater充气器=活动。getLayoutInflater();
if(convertView==null){
convertView=充气机。充气(R.layout.row_网格,空);
holder=新的ViewHolder();
holder.img=(ImageView)convertView.findViewById(R.id.image);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
item=list.get(位置);
if(item.get(“img”).length()>0)
imageLoader.displayImage(“http://website.com/img/“+item.get”(“img”)、holder.img、options、,
图像监听器);
其他的
holder.img.setImageDrawable(getResources().getDrawable(R.drawable.fix));
}
返回视图;
}
公共空间清除(){
if(this.list.size()>0)
this.list.clear();
}
}
私有静态类ImageDisplayListener扩展了SimpleImageLoadingListener{
静态最终列表displayedImage=Collections.synchronizedList(新LinkedList());
@凌驾
public void onLoadingComplete(字符串imageUri、视图视图、位图加载图像){
如果(LoadeImage!=null){
ImageView ImageView=(ImageView)视图;
布尔值firstDisplay=!displayedImages.contains(imageUri);
如果(第一次显示){
动画(imageView,500);
displayedImages.add(imageUri);
}
}
}
}
我已经用3部手机测试过了,效果很好,但当我在朋友的手机上测试时,有时其中一张图片没有显示出来

例如,当我进入“活动”时,它会显示所有图像,当我向下滚动最后一个项目不再显示的位置,然后向上滚动时,突然之前显示的一个图像不再显示,它会显示它的默认图像

这个代码有什么问题吗? 顺便说一句,我有4个标签,这发生在标签上


感谢displayImage方法的问题,在某些情况下它无法正确编码URL。更好的方法是使用毕加索库

如果您使用的是android studio,请添加

编译'com.squareup.picasso:picasso:2.5.2'

在build.gradle文件和同步中:

或者下载eclipse的Jar文件

之后,您就可以使用毕加索库,并用

if(item.get("img").length()>0)
        imageLoader.displayImage("http://website.com/img/" + item.get("img"), holder.img, options,
            imageListener);
    else
        holder.img.setImageDrawable(getResources().getDrawable(R.drawable.fix));
    }

 String imgUrl = "http://website.com/img/" + item.get("img");
    if (!imgUrl.equals(""))
        Picasso.with(activity).load(imgUrl).into(holder.img);
    else
        Picasso.with(activity).load(R.drawable.fix).into(holder.img );
使用“lazyImageLoaderAdapter.notifyDataSetChanged();”
其中lazyImageLoaderAdapter是任何适配器的对象。

为此,您需要实现图像的延迟加载。或者使用piccaso library.displayImage()是否将空格编码为%20?