文档章节

Android Widget 中ListView加载网络图片

yaly
 yaly
发布于 2016/05/13 15:13
字数 311
阅读 96
收藏 3

关于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());


            @Override
            public RemoteViews getViewAt(final int position) { 
                //这里初始化RemoteView,设置监听,等等....

                flags.put(position, false);
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //这里用了ImageLoader,或者别的带有加载回调加载库
                        ImageLoader.getInstance().loadImage(datas.get(position).getImgUrl, 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(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;
            }

© 著作权归作者所有

共有 人打赏支持
yaly
粉丝 3
博文 96
码字总数 48212
作品 0
海淀
Android工程师
Android ListView 滑动背景为黑色的解决办法 listview小知识整理

在别的地方看到的,转过来作为记录!! 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备...

假装是大神
2012/12/20
0
0
转: Android ListView 滑动背景为黑色的解决办法

在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:back...

vane_
2012/05/25
0
0
总结的一些android公共库

最新最准确内容建议直接访问原文:Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类) 介绍总结的一些android公共库,包含缓存(图片缓存、预取缓存)、公共View(下拉...

Trinea
2012/07/16
0
1
android应用开发 网络编程与常见功能优化总结

一般的应用都是从服务器获取数据,然后通过极致的界面风格,将数据清晰,明朗的展现给用户。、 那么就可以分为这两块: 1.界面UI 追求极致 2.功能 2.1获取数据:主要是与服务器通信,那么就要...

补全
2013/04/07
0
1
Android Activity / Fragment内存泄露引论

 Android Activity / Fragment内存泄露引论 Android发生OOM(OutOfMemoryError)问题的重要因素是编程设计不佳的代码出现内存泄露(Leak)造成Android分配的内存紧张。关于内存泄漏的问题...

开开心心过
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

7 个致命的 Linux 命令

导读 如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避...

问题终结者
今天
0
0
设计模式:工厂方法模式(工厂模式)

工厂方法模式才是真正的工厂模式,前面讲到的静态工厂模式实际上不能说是一种真正意义上的设计模式,只是一种变成习惯。 工厂方法的类图: 这里面涉及到四个种类: 1、抽象产品: Product 2、...

京一
今天
0
0
区块链和数据库,技术到底有何区别?

关于数据库和区块链,总会有很多的困惑。区块链其实是一种数据库,因为他是数字账本,并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是,区块链是数据库,数据库可不...

HiBlock
今天
0
0
react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
今天
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部