我正在使用排球库从互联网上加载图片。我有一个列表视图,一些行使用volley的库“NetworkImageView”加载,其他行则由静态资源加载。
似乎出现了问题,因为我的行已经错误地分配了图像。
我有一个ArrayAdapter,这里有getView方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
House house = houses.get(position);
if (convertView == null) {
LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
convertView=inflater.inflate(this.layout, parent, false);
holder=new ViewHolder();
holder.image=(NetworkImageView) convertView.findViewById(R.id.imageView1);
holder.name=(TextView) convertView.findViewById(R.id.housename_listelement_houseslist);
holder.rating=(TextView) convertView.findViewById(R.id.houserating_listelement_houseslist);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if(house.getUrl()!=null){
String url=house.getUrl();
holder.image.setImageUrl(url, ((TopHousesListViewPager)getContext()).mImageLoader);
}else{
holder.image.setBackgroundResource(R.drawable.defaulthouse);
}
holder.name.setText(house.getName());
holder.rating.setText(String.format("%.2f",house.getRate()));
return convertView;
}
正如你所看到的,如果我的对象有一个url,我只会显示来自互联网的图像,但是我正在那些对象没有url但是图像来自其他行的行...
通知书?
谢谢!
答案 0 :(得分:10)
正如@Selvin所说:你必须在获得持有人后每次重置图片网址:
} else {
holder = (SuggestionViewHolder) convertView.getTag();
holder.image.setImageUrl(null, imageLoader);
}
if(house.getUrl()!=null){
String url=house.getUrl();
holder.image.setImageUrl(url, ((TopHousesListViewPager)getContext()).mImageLoader);
} else {
holder.image.setBackgroundResource(R.drawable.defaulthouse);
}
这对我有用。
答案 1 :(得分:3)
如果有人在Android 4.0+中使用更加现代的ViewHolder / getView范例和固定的getTag
和SparseArray
,请按以下步骤解决此问题
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context)
.inflate(R.layout.mLayout, parent, false);
}
);
NetworkImageView mView = ViewHolder.get(convertView, R.id.mview);
mView.setImageUrl(null, mImageLoader);
此时将imageUrl设置为null,然后在getView中稍后将列表对象加载到当前位置后,在那里设置正确的imageUrl