失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android Widget 中ListView加载网络图片

Android Widget 中ListView加载网络图片

时间:2020-01-24 02:24:19

相关推荐

Android Widget 中ListView加载网络图片

为什么80%的码农都做不了架构师?>>>

关于Widget的介绍和用法可以看这两篇博文,写的非常详细了

Android 之窗口小部件详解--App Widget/skywang12345/p/3158310.html

Android 之窗口小部件高级篇--App Widget 之 RemoteViews/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;}

如果觉得《Android Widget 中ListView加载网络图片》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。