android listview 网络数据,Android的listview使用之3,绑定网络数据并显示

先看效果图

AAffA0nNPuCLAAAAAElFTkSuQmCC

前面已经给大家介绍了自定义适配器和异步任务,那么今天就需要结合两个内容来显示网络图片了

先给权限

把上次写的异步任务类和httputil类复制过来,然后在适配器中做如下修改@Override

public View getView(int position, View convertView, ViewGroup parent) {

convertView = mInflater.inflate(R.layout.my_listview_item, null);//通过mInflater来加载布局

ImageView iv = (ImageView) convertView.findViewById(R.id.iv);//找到对应的控件

MyAsyncTask myAsyncTask = new MyAsyncTask(iv);

myAsyncTask.execute(list.get(position));//拿到集合中的url并开始任务

return convertView;

}

MainActivity数据修改@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.lv);

list = new ArrayList<>();//存储对象的集合

//图片的网址

String[] urls = {"http://p4.so.qhmsg.com/t018349127914f495ce.jpg"

, "http://p4.so.qhmsg.com/t01aade72dccf26cffe.jpg"

, "http://p4.so.qhmsg.com/bdr/_240_/t01b4d668163834560e.jpg"

, "http://p3.so.qhmsg.com/bdr/_240_/t01f46840e54a54bee3.jpg"

, "http://p4.so.qhmsg.com/bdr/_240_/t019e2d84e53580b099.jpg"

, "http://p2.so.qhmsg.com/bdr/_240_/t011b8b18003e6a5e77.jpg"

, "http://p2.so.qhmsg.com/bdr/_240_/t011e722a8a032aaecc.jpg"

, "http://p4.so.qhmsg.com/bdr/_240_/t0100fae0e6eb8d624e.jpg"

, "http://p0.so.qhmsg.com/bdr/_240_/t011cd46113908952c0.jpg"

, "http://p1.so.qhmsg.com/bdr/_240_/t01a63ec9efb3f5b06b.jpg"};

for (int i = 0; i 

list.add(urls[i]);//网址存入集合中

}

MyAdapter myAdapter = new MyAdapter(this, list);//新建适配器并且传入数据的集合

lv.setAdapter(myAdapter);//设置适配器

}

这样就可以啦,但是如果数据量多,比如我再循环一百次加载一千条数据for (int j = 0; j 

for (int i = 0; i 

list.add(urls[i]);//网址存入集合中

}

}

就会出现新的问题,我们会发现,越往下拉,程序越来越卡,最后直接崩溃掉,看Log日志会发现以下问题

AAffA0nNPuCLAAAAAElFTkSuQmCC

就是我们常说的OOM异常(内存溢出),因为我们加载的数据越来越多,内存占用越来越多,最后导致内存装不下这些图片了,程序就奔溃,

其实我们看到的只有固定个数的内容,没有必要把对象一直存储在内存里面,所以我们可以把已经不再屏幕中的item对象拿过来复用,只需修改数据即可,这就 Listview的优化,下次再给大家介绍。

AAffA0nNPuCLAAAAAElFTkSuQmCC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值