У меня есть проблемы при реализации асинхронного загрузчика изображения к следующему коду. Я читал некоторые сообщения вокруг сети об этом, и я думаю, что понимаю логику позади него, но я, кажется, перестал работать в реализации его.
Рев кода - то, что я использую для простой загрузки изображений в моем listview.
public class MyCustomAdapter extends ArrayAdapter<RSSItem> {
Bitmap bm;
public MyCustomAdapter(Context context, int textViewResourceId, List<RSSItem> list) {
super(context, textViewResourceId, list);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
bm = LoadImage(myRssFeed.getList().get(position).getDescription(), bmOptions);
View row = convertView;
if(row == null) {
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.rsslist, parent, false);
}
TextView listTitle = (TextView)row.findViewById(R.id.listtitle);
listTitle.setText(myRssFeed.getList().get(position).getTitle());
ImageView listDescription = (ImageView)row.findViewById(R.id.listdescription);
listDescription.setImageBitmap(bm);
TextView listPubdate = (TextView)row.findViewById(R.id.listpubdate);
listPubdate.setText(myRssFeed.getList().get(position).getPubdate());
return row;
}
}
Вы можете использовать мой пример кода в качестве ссылки Ленивая загрузка изображений в ListView
При решении будет заполнение переменной класса в вашем адаптере, скажем, ArrayList ссылками на все "ImageView listDescription"
ArrayList<ImageView> allImageViews = new ArrayList<ImageView>();
...
public View getView(int position, View convertView, ViewGroup parent){
...
ImageView listDescription=(ImageView)row.findViewById(R.id.listdescription);
allImageViews.add(listDescription);
...
}
private class ImageDownLoader extends AsyncTask<ArrayList, Void, Void>{
doInBackground(){
for(ImageView imageView: allImageViews){
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
bm = LoadImage(imageNameOrWhatever, bmOptions);
imageView.setImageBitmap(bm);
}
}
Затем используйте AsyncTask, который проходит через каждый ImageView, извлекает связанное изображение и удаляет ImageView из ArrayList. Он будет загружаться по одному в фоновом режиме, в то время как ваш графический интерфейс все равно будет отвечать.