博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同步、异步数据混合加载列表的技巧
阅读量:6457 次
发布时间:2019-06-23

本文共 1923 字,大约阅读时间需要 6 分钟。

情况是这样的,你的页面需要显示一个列表数据,但是数据的一部分,你可以同步的获取到,数据的另一部你只能异步的获取到,另外,你需要根据这些数据中间插入一些分割占位,或者一些header之类的装饰性数据项。

一开始处理这样的情况,我写得都比较混乱,一般会在异步数据的回调里面去处理,现在想到一个更好的写法。

先假设一个更加具体的场景。

比如我有一个列表,第一部分是一段同步获取的数据,然后第二部分是一段异步获取的数据

List
list1 = getList1(); // 同步获取的数据requestList2(new Callback(List
list2) { // 异步获取的数据});

另外,如果异步获取的列表2存在,需要在列表1列表2之间加上一个header,作为分割。

列表2的数量如果超过5个,就只显示5个,并且在底部添加一个展开更多的item项。

其实要解决这种情况非常简单,可以用一个很统一的方式来处理。

首先我们要将获取的数据项存到成员变量中,然后用唯一一个方法来生成最终的列表,最后把这个列表交给adapter。

class Activity {    // 成员变量中需要有数据,上面两个方法调用后,就将数据赋值过来    List
mList1 = null; List
mList2 = null; List
mTotalList = null; // 用这个方法来对列表进行合并,不管数据是多么破碎,从哪里来,同步也好,异步也好,加上一些乱七八糟的分隔header都没问题 private void mergeAllList() { // 先对列表进行清除 if (mTotalList == null) { mTotalList = new ArrayList<>(); } else { mTotalList.clear(); } // 添加列表1的数据 if (mList1 != null) { for (String s : mList1) { mTotalList.add(s); } } // 添加列表2的数据 if (mList2 != null) { mTotalList.add("header"); // 先添加header for (int i = 0; i < mList2.size() && i < 5; i++) { // 最多只添加5个 mTotalList.add(mList2.get(i)); } if (mList2.size() > 5) { mTotalList.add("展开更多"); } } } // 用的时候 private void updateData() { List
list1 = getList1(); // 同步获取的数据 mList1 = list1; mergeAllList(); requestList2(new Callback(List
list2) { mList2 = list2; mergeAllList(); }); }}

按照上面的写法,就可以方便的处理列表数据来源多处的情况了。

另外建议不要用ListView的headerView,footerView之类的东西了,那个东西太容易出问题,而且添加起来也不方便,建议新增viewType,当成数据项加入到数据中,由adapter来搞,这样也比较统一。

转载地址:http://rtizo.baihongyu.com/

你可能感兴趣的文章
Leetcode: Word Break
查看>>
2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)
查看>>
图像处理之opencv---mat、cvmat、IplImage之间的转换
查看>>
linux环境变量配置
查看>>
JAVA 设计模式 装饰者模式
查看>>
视频直播、视频会议、视频点播三者有何区别
查看>>
lintcode:Plus One 加一
查看>>
解决启动Distributed Transaction Coordinator服务出错的问题
查看>>
Java数据类型和MySql数据类型对应表
查看>>
面向对象编程(十)——继承之Super关键字及内存分析
查看>>
Atitit. Atiposter 发帖机 新特性 poster new feature v7 q39
查看>>
Android View 如何测量
查看>>
splay tree成段更新,成段查询poj3466
查看>>
Data Usage Technical Information
查看>>
java程序内存泄漏排查
查看>>
iOS开发之--NSPredicate
查看>>
UML进行Linux内核调试
查看>>
通过url链接登录其他系统
查看>>
补全aaz288 可能有问题的过程 P_COMPL_AAZ288
查看>>
ASP.NET 使用Ajax
查看>>