Асинхронное обновление изображения в виджете Ошибка getViewAt - PullRequest
0 голосов
/ 25 февраля 2019

В виджете у меня есть список элементов заголовка + изображения.

Изображения загружаются из Интернета, когда элементы появляются на экране.

Если я загружаю изображения непосредственно в методе 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...