Android ListView 异步加载刷新(更多)的思路
2016-07-22 17:06
344 查看
Android中ListView 适配器数据如果更改后,没有在UI线程及时调用适配器Adapter的通知更新方法将会抛出异常。
直接操作适配器的数据不安全。
网络的数据解析也是耗时任务,比如JSON转换。以下以JSON为例。
虽然ListView正逐渐被CardView取代,但是基本思路还是一样的。
这里在实践中总结了2种思路。
1.克隆数据方式
非UI线程{
加载网络数据。
new List copyList=adaperList.clone().
JSON字符转换成JAVA对象。
add to copyList.
}
UI线程的回调 (copyList){ //Handler
if(刷新){
adaperList.clear();
}
for (item:copyList){
adaperList.add(item);
}
}
[b]2.直接传参
[/b]
非UI线程{
加载网络数据。
new List copyList.
JSON字符转换成JAVA对象。
add to copyList.
}
UI线程的回调 (copyList){//Handler
if(刷新){
adaperList.clear();
}
for (item:copyList){
adaperList.add(item);
}
}
传参可以使用直接类型,也可以通过序列化List通过Bundle传参Handler
直接操作适配器的数据不安全。
网络的数据解析也是耗时任务,比如JSON转换。以下以JSON为例。
虽然ListView正逐渐被CardView取代,但是基本思路还是一样的。
这里在实践中总结了2种思路。
1.克隆数据方式
非UI线程{
加载网络数据。
new List copyList=adaperList.clone().
JSON字符转换成JAVA对象。
add to copyList.
}
UI线程的回调 (copyList){ //Handler
if(刷新){
adaperList.clear();
}
for (item:copyList){
adaperList.add(item);
}
}
[b]2.直接传参
[/b]
非UI线程{
加载网络数据。
new List copyList.
JSON字符转换成JAVA对象。
add to copyList.
}
UI线程的回调 (copyList){//Handler
if(刷新){
adaperList.clear();
}
for (item:copyList){
adaperList.add(item);
}
}
传参可以使用直接类型,也可以通过序列化List通过Bundle传参Handler
相关文章推荐
- Smack-Android客户端入门一
- 自定义Android动画---深入理解matrix
- 适用于Android开发的简单聊天软件
- Android使用vitamio创建自己的播放器
- Android自定义view实现扇形
- Handler的深入了解
- HTML5开发Android程序
- Android Studio工具修理集
- Android Studio工具修理集
- Android自己的应用获取一张图片
- Android中WebView与JS的交互
- android studio自定义toolbar
- android SDK开发 -- TitleBar封装(一)
- Retrofit2 源码分析
- Android自定义View 简单实现多图片选择控件
- android studio listview控件基础
- Android直播气泡效果
- android developer tiny share-20160722
- android developer tiny share-20160722
- Android 商品倒计时(DigitalClock实现倒计时 )