我的ListViewAdapter存在很大问题。
我的列表视图同时显示2个托管。每个条目都应该从我的服务器获得不同的图片。 第一个和第二个工作正常,但如果我向下滚动,下一个部分会有相同的图片。
我的代码如下:
if (viewHolder.imgPic != null) {
String strUrl = mainUrl+list.get(position).getUrl();
new ImageDownload(viewHolder.imgPic).execute(strUrl);
}
我正在检查视图并且正在执行它,如果它是null。
有人能帮助我吗? 感谢
答案 0 :(得分:1)
根据您的问题,我可以假设您不了解ListView
recycling mechanisem
基本上,查看不再可见(在用户滚动远离视线后),它被回收到显示需要显示的新项目。这是convertView
方法的getView()
参数...
可能你看到相同的图像,因为回收的视图保留了相同的图像..
还存在异步任务(您的ImageDownload类)的问题,当启动请求的原始项目已被回收时,它可以完成它。
我建议你“挖掘”为挖掘器,因为你可以理解所有关于ListView
的东西 - 这是最复杂和最重要的UI组件之一。阅读我链接的帖子是一个好的开始。
此视频也非常重要:
答案 1 :(得分:0)
这是我的GetView:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if(rowResourceId!=R.layout.search_empty_list) {
if (convertView == null) {
LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflator.inflate(rowResourceId, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.textName = (TextView) view.findViewById(R.id.textView1);
viewHolder.imgPic = (ImageView) view.findViewById(R.id.imgPic);
if (viewHolder.imgPic != null) {
String strUrl = mainUrl+list.get(position).getUrl();
new ImageDownload(viewHolder.imgPic).execute(strUrl);
}
view.setTag(viewHolder);
} else {
view = convertView;
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.textName.setText(list.get(position).getName());
} else {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(rowResourceId, parent, false);
TextView textView1 = (TextView) view.findViewById(R.id.textView1);
textView1.setText(list.get(0).getName());
}
return view;
}