上下滚动时,listview中的android ImageView不显示图像
我通过universalImageDownloader从互联网上获取图像,并使用ViewHolder显示这些图像:上下滚动时,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<
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?