我有一个ListView
,它拥有有关歌曲的信息。另外,我想添加封面图片到ListView
。ListAdapter/convertView和新的线程来获取图像
因此我写了一个适配器。在此适配器最主要的是以下getView()
方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Map dataSet = mData.get(position);
View v = convertView;
ViewHolder holder;
if (convertView == null) {
v = mInflater.inflate(mResource, parent, false);
holder = new ViewHolder();
holder.artist = (TextView) v.findViewById(R.id.artist);
holder.imageView = (ImageView) v.findViewById(R.id.imageListView);
holder.title = (ScrollingTextView) v.findViewById(R.id.title);
holder.time = (TextView) v.findViewById(R.id.time);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.artist.setText((CharSequence) dataSet.get("artist"));
holder.title.setText((CharSequence) dataSet.get("title"));
holder.time.setText((CharSequence) dataSet.get("time"));
GetImg gi = new GetImg(v, mContext);
gi.start();
return v;
}
你可以看到,我使用一个ViewHolder
有更好的表现。在延伸Thread
的GetImg
类中,我下载图像并将Bitmap
设置为ImageView
。
现在我收到以下问题。有时候,ListView
中的多个子视图会获得相同的图像。为什么?
当我不使用convertView
时,一切正常,但速度不及convertView
。
GetImg类的一个参数是视图v。我从GetImg类的视图v中获取ImageView,并在该类中设置位图。 – svennergr 2013-03-04 23:48:58
而且我甚至没有URL,也没有数据集中的位图。 – svennergr 2013-03-04 23:56:47
您可以将各个项目的特定图像保存为可绘制。在DB /共享首选项中保留歌曲 - >图像的映射。然后在Arraylist中填充ListView并在上面的行中访问包含imageNames的arrayList时提取此信息。我也在我的应用程序中完成了这项工作。 – 2013-03-05 00:03:23