Универсальный загрузчик изображений внутри виджета RemoteViewsFactory для Android


Я хотел бы опубликовать решение проблемы. Надеюсь, это поможет другим людям, столкнувшимся с той же проблемой.

Это связано с библиотекой универсального загрузчика изображений Android, доступной здесь

Первоначальный вопрос звучал так:

Я начал сегодня использовать ваш Android Universal Image Loader (AUIL), что очень и очень приятно ! Спасибо, что поделились этим !

Я знаю, что можно использовать AUIL в проекте виджета android внутри класса Provider но я пытаюсь загрузить кратное изображение внутри ListView (само внутри виджета).

1 2

1 ответ:

Решение, которое мне удается найти, является

public class YourViewsFactory implements RemoteViewsService.RemoteViewsFactory
{
 Map<Integer, Boolean> flags = Collections.synchronizedMap(new HashMap<Integer, Boolean>());
 Bitmap mBitmap;
 Handler handler = new Handler(Looper.getMainLooper());


  @Override
  public RemoteViews getViewAt(final int position)
{
  final RemoteViews row = new RemoteViews(ctxt.getPackageName(), R.layout.row);
  flags.put(position, false);
  handler.post(new Runnable()
  {
    @Override
    public void run()
    {
        m_imgLoader.loadImage(YOUR_IMAGE_URL, new SimpleImageLoadingListener()
        {
            @Override
            public void onLoadingStarted(String imageUri, View view)
            {
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason)
            {
                flags.put(position, true);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view)
            {
                flags.put(position, true);
            }

            @Override
            public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap)
            {
                mBitmap = bitmap;
                flags.put(position, true);
            }
        });
    }
});

while (!flags.get(position))
{
    try
    {
        Thread.sleep(100);
    } catch (InterruptedException e)
    {
        e.printStackTrace();
    }
}
flags.put(position, false);
if (mBitmap != null)
{
    row.setImageViewBitmap(R.id.ivPoster, mBitmap);
} else
{
    row.setImageViewResource(R.id.ivPoster, R.drawable.cw);
}
mBitmap = null;
  } // End of getViewAt override


} // End of class

Это не мое решение, а одно из доступных Вове Клышевичу здесь!