【问题标题】:SmartImageView and Custom ListAdapter - First few items' imageViews not drawing?SmartImageView 和自定义 ListAdapter - 前几个项目的 imageViews 不绘制?
【发布时间】:2013-07-16 15:11:05
【问题描述】:

我需要一些关于 ListView 的帮助。

背景:

我创建了一个扩展 ArrayAdapter 的 ListAdapter -

列表中的每个项目都有 2 个SmartImageView's,我在异步任务中获取 URL 名称并将它们设置为:image1.setImageURL(someURL)。

我还使用带有 scoreHolder 的视图标签。我的 asynctask 与名为 onURLSFullyFetched 的侦听器一起工作 - 所以我只在完成获取 URL 时设置 SmartImageView's

列表项基于 scoreData 数组,我构造了一个字符串数组 images[] 以匹配 scoreData 中有多少元素。

在我的 getView() 中,当我填充图像时,我执行以下操作: 1. 检查 images[position] 是否为 null - 如果是,则调用 asynctask 任务来获取图像 url,并将结果保存到 images[position] 并设置图像持有者:

scoreHolder.image1.setImageUrl(URLS[1]);                                
scoreHolder.image2.setImageUrl(RLS[0]);

2。如果 images[position 不为 null,我只需根据 images[position] 设置 scoreHolder 图像。

问题:

除了加载列表视图时,一切都运行良好,“显示”(在屏幕上可见)的每个项目都不会填充图像。当我开始滚动列表视图时,我注意到之前不可见的项目,绘制图像很好。

然后,如果我向上滚动 [到未绘制图像的项目] - 我看到它已被绘制并设置好。

我错过了什么吗?

【问题讨论】:

  • @darkravedev 你有什么解决办法

标签: android android-listview android-imageview android-arrayadapter


【解决方案1】:

不要在 if 或 != 初始化变量之外的语句中添加任何内容。例如:

public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
ScoreHolder holder;

if(v == null){
v = inflater.inflate(resource, null);
holder = new ScoreHolder();
holder.image1 = (SmartImageView) v.find...
v.setTag(holder);
}else{
holder = (ScoreHolder)v.getTag();
}
holder.image1.setImageUrl(urls[position]);
return v;
}

类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多