【发布时间】:2011-12-26 05:14:12
【问题描述】:
我有从服务器下载图像的 GridView,我使用延迟加载方法将图像异步添加到网格。
我可以看到 getView 方法被多次调用,并且网格视图的位置不一致,直到图像被下载以获取位置。
现在,当我滚动 gridview 时,已经为位置下载的图像现在被其他图像替换。
但是在所有图片都下载好后,它工作正常。
我知道并阅读了之前关于 getView 调用不一致的帖子,但仍然无法解决问题。
`@Override public View getView(final int position, View convertView, 最终视图组视图组){ ViewHolder viewHolder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.ondemand_grid_item,
null);
viewHolder = new ViewHolder();
viewHolder.title = ((TextView) convertView
.findViewById(R.id.ondemand_grid_item_title));
viewHolder.image = ((ImageView) convertView
.findViewById(R.id.ondemand_grid_item_image));
viewHolder.iconImage = ((ImageView) convertView
.findViewById(R.id.on_demand_trailer_icon));
viewHolder.showSelectedImage = (ImageView) convertView.findViewById(R.id.ondemand_grid_item_img);
viewHolder.showSelectedImage.setVisibility(View.INVISIBLE);
viewHolder.showSelectedImage.setSelected(true);
viewHolder.seasonNumber = (TextView) convertView.findViewById(R.id.ondemand_grid_item_season);
viewHolder.seasonNumber.setVisibility(View.INVISIBLE);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final OnDemandItem onDemandItem = getItem(position);
imageLoader.DisplayImage(onDemandItem.getPosterUrl(), viewHolder.image, onDemandItem.getGenrePlaceHolder());
showHideTrailerIcon(viewHolder, onDemandItem);
if (onDemandItem.getType() == AssetTypeEnum.SERIE) {
if (onDemandItem.getSeasonNumber() != null && !"".equals(onDemandItem.getSeasonNumber())) {
viewHolder.seasonNumber.setVisibility(View.VISIBLE);
viewHolder.seasonNumber.setText("Seizoen " + onDemandItem.getSeasonNumber());
}
}
viewHolder.title.setText(onDemandItem.getTitle());
if (selectedOndemandItemId == onDemandItem.getId()) {
convertView.findViewById(R.id.ondemand_grid_item_img).setVisibility(View.VISIBLE);
} else {
ImageView showSelectedImage = (ImageView) convertView.findViewById(R.id.ondemand_grid_item_img);
if (showSelectedImage != null) {
showSelectedImage.setVisibility(View.INVISIBLE);
}
}
return convertView;
}`
其中:imageLoader.DisplayImage(onDemandItem.getPosterUrl(), viewHolder.image, onDemandItem.getGenrePlaceHolder()); 是图片异步下载方式
【问题讨论】:
-
发布您的 getView 方法,当我们有更多信息时,我们可以为您提供更多帮助。许多事情可能是错误的。
-
这听起来可能是由回收的视图和异步回调引起的。需要您的代码验证
-
@HandlerExploit 编辑了我的问题,并附上了 getView 方法
-
@Spidy : 是的,我想和你一样,请找到附加的 getView 代码
标签: android gridview android-arrayadapter