В виджете у меня есть список элементов заголовка + изображения.
Изображения загружаются из Интернета, когда элементы появляются на экране.
Если я загружаю изображения непосредственно в методе getViewAtэто работает: изображение загружается правильно , но у меня задержка в визуализации .
Поэтому я пытаюсь загрузить изображения асинхронно, но это не работает: изображения помещаются в случайном порядке, а некоторыеповторяется для нескольких элементов.
В чем ошибка?
Вот код:
class WidgetViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private List<News> mNewsItems = new ArrayList<>();
private final Context mContext;
...
public RemoteViews getViewAt(int position) {
RemoteViews widgetRow = new RemoteViews(mContext.getPackageName(), R.layout.widget_news_item);
new AsyncCaller(widgetRow).execute(mNewsItems.get(position).getImageUrl);
widgetRow.setTextViewText(R.id.widget_title, mNewsItems.get(position).getTitle();
return widgetRow;
}
private class AsyncCaller extends AsyncTask<String, Void, Bitmap> {
RemoteViews widgetRow;
AsyncCaller(RemoteViews widgetRow){
this.widgetRow = widgetRow;
}
@Override
protected Bitmap doInBackground(String... url) {
try {
URL imgurl = new URL(url[0]);
Bitmap bitmap = BitmapFactory.decodeStream(imgurl.openConnection().getInputStream());
return bitmap;
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
this.widgetRow.setImageViewBitmap(R.id.wiget_image, bitmap);
}
super.onPostExecute(bitmap);
}
}
}