我已经搜索过SO,并发现了4个类似的问题,但似乎这个问题不同。我也花了大约7个小时来解决这个问题,并没有找到我做错的地方。
问题:
ListView中的每一行都包含两个图像。当我启动活动时,第一行中的一个或两个imageView显示错误的图像,这只发生在有时之后。有时,行在发布后显示正确的图像。
当我向下滚动隐藏第一行,然后再向上滚动时,图像会变为正确的图像。
尝试解决方案:
我发现只有一个解决方案,就是在getView方法的开头设置convertView = null。是的,它的工作原理,imageView显示正确,但导致其他问题和错误。滚动变得不顺畅,有时一些图像变得太小了。
注意:
在运行debug之后,数据没有问题,每行都能正确获取数据。
我的代码
MatchAdapter.class
getView方法
public View getView(int position, View convertView, ViewGroup parent) {
Match entry = listMatch.get(position);
MatchAdapter.ViewHolder myViewHolder;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.match_row, parent, false);
myViewHolder = new MatchAdapter.ViewHolder();
myViewHolder.home_team_name = (TextView) convertView.findViewById(R.id.home_team_name);
myViewHolder.away_team_name = (TextView) convertView.findViewById(R.id.away_team_name);
myViewHolder.home_logo_view = (ImageView) convertView.findViewById(R.id.home_team_logo);
myViewHolder.away_logo_view = (ImageView) convertView.findViewById(R.id.away_team_logo);
myViewHolder.venue = (TextView) convertView.findViewById(R.id.venue);
myViewHolder.time = (TextView) convertView.findViewById(R.id.time);
convertView.setTag(myViewHolder);
} else {
myViewHolder = (ViewHolder) convertView.getTag();
}
ImageLoader imageLoader = new ImageLoader(this.context, "com.myapps", R.drawable.team_logo);
imageLoader.DisplayImage("http://myapps.com/assets/images/logos/"+ entry.getHome_team_logo(),
myViewHolder.home_logo_view);
imageLoader.DisplayImage("http://myapps.com/assets/images/logos/" + entry.getAway_team_logo(),
myViewHolder.away_logo_view);
myViewHolder.home_team_name.setText(entry.getHome_team_name());
myViewHolder.away_team_name.setText(entry.getAway_team_name());
myViewHolder.venue.setText(entry.getVenue());
myViewHolder.time.setText(entry.getTime());
return convertView;
}
其他相关代码:
ImageLoader.class(我不希望这个问题变得太长而无法滚动)
感谢您的帮助!
答案 0 :(得分:0)
我的猜测是以下代码
太早了。 ListView的getView是多线程的,并且需要花费一些时间来扩展布局以转换视图。不知何故,变量引用变得不正确。匹配条目= listMatch.get(position);
Call Match entry = listMatch.get(position);之后
其他{ myViewHolder =(ViewHolder)convertView.getTag(); }
答案 1 :(得分:0)
问题解决了!我使用lazylist重新设计了我的整个代码,以下是fedor Simple demo of a LazyList
的示例我从这里找到了How do I do a lazy load of images in ListView