[英]Rendering a ListView with a background worker thread
我在我的應用程序中有一個ListView,其中包含2個TextViews和2個ImageViews,我注意到當我滾動它時,它並不完全平滑,我四處搜索並注意到我需要一個需要渲染的后台工作線程我的ImageViews在我的listView中。 我嘗試實現它,但是因為我從我的線程內部引用了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;
}
我建議您使用Picasso進行圖像加載/處理緩存以及在imageview上進行渲染。 將罐子放入工作區后,只需要一行代碼。
代替 :
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();
}
}
你可以用
Picasso.with(context).load(localPhotosUrl).into(holder.imgIcon);
您正在尋找的圖像被稱為“延遲加載”。 將圖像加載到GetView中會使速度變慢。 圖像加載已在線程中完成。
請參閱: ListView中的圖像延遲加載
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.