简体   繁体   English

适用于Android的RemoteViewsFactory内部的通用图像加载器

[英]Universal Image Loader inside RemoteViewsFactory for Android widget

I would like to publish a solution to a problem. 我想发布一个解决方案。 Hopefully it will help other people facing the same problem. 希望它可以帮助其他面临相同问题的人。

This is related to the Android Universal Image Loader library available here 这与此处提供的Android Universal Image Loader库有关

Original question was : 最初的问题是:

I started today to use your Android Universal Image Loader (AUIL) which is very very nice ! 我今天开始使用您的Android Universal Image Loader(AUIL),它非常好! Thank you for sharing this ! 感谢您分享这个 !

I know that it is possible to use AUIL in an android widget project inside the Provider class but I'm trying to load multiples image inside a ListView (itself inside the widget). 我知道可以在Provider类内的android小部件项目中使用AUIL,但我正在尝试在ListView(小部件内的本身)内加载倍数图像。

The solution I manage to find is 我设法找到的解决方案是

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

This is not my solution, but one of Vova Klyshevich available here ! 这不是我的解决方案,而是这里提供的Vova Klyshevich之一!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM