Android Widget 中ListView加载网络图片
生活随笔
收集整理的這篇文章主要介紹了
Android Widget 中ListView加载网络图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
關于Widget的介紹和用法可以看這兩篇博文,寫的非常詳細了
Android 之窗口小部件詳解--App Widget?http://www.cnblogs.com/skywang12345/p/3158310.html?
Android 之窗口小部件高級篇--App Widget 之 RemoteViews?http://www.cnblogs.com/skywang12345/p/3264991.html
上面兩篇博文沒有提到怎么給Widget中的ListView或者GridView中顯示網絡圖片,而我們的項目的需求中需要Widget中的ListView填充接口獲得的文字和圖片,試過很多方法最后發現還是以下這種偽同步比較讓人滿意。
private Map<Integer, Boolean> flags = Collections.synchronizedMap(new HashMap<Integer, Boolean>());private Bitmap mBitmap;private Handler handler = new Handler(Looper.getMainLooper());@Overridepublic RemoteViews getViewAt(final int position) { //這里初始化RemoteView,設置監聽,等等....flags.put(position, false);handler.post(new Runnable() {@Overridepublic void run() {//這里用了ImageLoader,或者別的帶有加載回調加載庫ImageLoader.getInstance().loadImage(datas.get(position).getImgUrl, new SimpleImageLoadingListener() {@Overridepublic void onLoadingStarted(String imageUri, View view) {}@Overridepublic void onLoadingFailed(String imageUri, View view, FailReason failReason) {flags.put(position, true);}@Overridepublic void onLoadingCancelled(String imageUri, View view) {flags.put(position, true);}@Overridepublic void onLoadingComplete(String arg0, View arg1, Bitmap bitmap) {mBitmap = bitmap;flags.put(position, true);}});}});//在此一直等待獲取到網絡圖片while (!flags.get(position)) {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}flags.put(position, false);if (mBitmap != null) {mRemoteViews.setImageViewBitmap(R.id.widget_item_image, mBitmap);} else {mRemoteViews.setImageViewResource(R.id.widget_item_image, R.mipmap.ic_launcher);}mBitmap = null;return mRemoteViews;}轉載于:https://my.oschina.net/yaly/blog/674642
總結
以上是生活随笔為你收集整理的Android Widget 中ListView加载网络图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dpkg的用法
- 下一篇: 多线程系列之学习多线程下载的基本原理和基