【发布时间】:2013-12-13 14:49:00
【问题描述】:
我是我的应用程序,我有一个 ListView,它有 2 个 TextViews 和 2 个 ImageViews,我注意到当我滚动它时,它并不完全流畅,我四处搜索并注意到我需要一个后台工作线程需要在我的 listView 中呈现我的 ImageViews。我试图实现它,但我做不到,因为我从我的线程内部引用 viewHolder 类,所以持有者需要是最终的,但这不可能发生,所以可能我做错了。有人有吗关于如何实现这一点的任何想法?提前谢谢你
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MonumentHolder holder = null;
if(row == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new MonumentHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.imageView3);
holder.txtTitle = (TextView)row.findViewById(R.id.textView1);
holder.marker = (ImageView)row.findViewById(R.id.imageView2);
holder.descr = (TextView)row.findViewById(R.id.textView2);
row.setTag(holder);
}
else{
holder = (MonumentHolder)row.getTag();
}
Monument monument = monuments.get(position);
holder.txtTitle.setText(monument.getTitle());
if(monument.getTitleOfCategory().equals("Βυζαντινά Μνημεία"))
holder.marker.setImageResource(R.drawable.memorial);
else if(monument.getTitleOfCategory().equals("Αρχαιολογικά Μνημεία"))
holder.marker.setImageResource(R.drawable.ar);
else if(monument.getTitleOfCategory().equals("Ιστορικά"))
holder.marker.setImageResource(R.drawable.hist);
else
holder.marker.setImageResource(R.drawable.museum);
localPhotosUrl=monument.getLocalPhotosUrl();
holder.imgIcon.setImageBitmap(null);
if(!localPhotosUrl.isEmpty()){
File picToLoad = new File(localPhotosUrl.get(0));
byte[] lala = null;
try {
lala = org.apache.commons.io.FileUtils.readFileToByteArray(picToLoad);
s(lala.length);
System.gc();
Bitmap bitmap = BitmapFactory.decodeByteArray(lala, 0, lala.length);
holder.imgIcon.setImageBitmap(bitmap);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
holder.descr.setText(monument.getContent());
return row;
}
【问题讨论】: