android 数据重构(仿淘宝浏览记录,足迹)
数据结构 ->数据重构
- 原因
处理这个数据的主要原因是,后台服务器返回的数据格式在ios那边因为其控件可以对数据进行分区显示,可以直接处理,而在android上我们显示控件就是listview,只能按一条item一条item的显示,因此分作两个item的话需要,其他数据分类. - 需求:
浏览时间分类浏览过的商品(与淘宝足迹一样)
- 问题:
服务器数据:
1对1, 时间+item商品
现在需求将数据分类成 : 1对多 时间+list商品 - 分析:
可以试用两种方法1.使用一个item在item头隐藏显示时间, 2.使用两个item 分类显示时间
ps:由于listview涉及到了item的删除 因此第一种方式不可使用,那么如果使用两个item的话就需要对数据进行重构.
重构成什么样子呢,
1.使用treemap来分类数据TreeMap
/**
* 重构分类各个时间段数据结构
* @param list
* @return
*/
public List<Object> pickCategorys(List<GoodsInfo> list) {
newGoodsMap.clear();
newGoodsList.clear();
for (GoodsInfo info : list) {
String day = info.getCreateDay();
List<GoodsInfo> infos = newGoodsMap.get(day);
if (infos == null) {
infos = new ArrayList<>();
infos.add(info);
newGoodsMap.put(day, infos);
} else {
infos.add(info);
}
}
//将分好类的数据重新存储,做为adapter的数据源
final Set<String> keys = newGoodsMap.keySet();
for (String key : keys) {
newGoodsList.add(key);
newGoodsList.addAll(newGoodsMap.get(key));
}
return newGoodsList;
}
- 2.1adapter的设置如下
@Override
public int getItemViewType(int position) {
final Object data = list.get(position);
return data instanceof String ? GOODS_TIME : GOODS_ITEM;
}
- 2.2由于treemap集合内比较的是自然排序,我们在这里比较的是string时间,因此要实现他的比较方法
/**
* treemap 分类数据容器
* 对key 进行倒序
*/
public final TreeMap<String, List<GoodsInfo>> newGoodsMap = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String the, String another) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dt1 = df.parse(the);
Date dt2 = df.parse(another);
return dt2.compareTo(dt1);//直接compareTo
// if (dt1.getTime() > dt2.getTime()) {
// SLog.d("dt1在dt2后");
// return -1;
// } else if (dt1.getTime() < dt2.getTime()) {
// SLog.d("dt1 在dt2前");
// return 1;
// } else {
// return 0;
// }
} catch (Exception exception) {
exception.printStackTrace();
}
return 0;
}
});
/**
* 重新分类后的数据源包含(title_time + goods_item)
*/
private List<Object> newGoodsList = new ArrayList<>();
- 3.下面是第二种方式同一item显示时间的,但是只可以显示死数据,无法对其进行动态删除
/**
* 同一item 数据分类
* @param list
* @return
*/
public HashMap<String, Integer> pickCategory(List<GoodsInfo> list) {
HashMap<String, Integer> result = new HashMap<String, Integer>();
for (int i = 0; i < list.size(); i++) {
if (result.containsKey(list.get(i).getCreateDay())) {
} else {
result.put(list.get(i).getCreateDay(), i);
}
}
return result;
}
这里写了主要思路.有什么说的不好的可以留言
android 数据重构(仿淘宝浏览记录,足迹)的更多相关文章
- android版高仿淘宝客户端源码V2.3
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
- Android自定义控件实战——仿淘宝商品浏览界面
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38656929 用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个Scr ...
- Android自己定义控件实战——仿淘宝商品浏览界面
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38656929 用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个Scr ...
- Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片
Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...
- Android仿淘宝头条滚动广告条
之前我使用TextView+Handler+动画,实现了一个简单的仿淘宝广告条的滚动,https://download.csdn.net/download/qq_35605213/9660825: 无 ...
- Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;
仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding=&q ...
- JS仿淘宝详情页菜单条智能定位效果
类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"( ...
- 基于Bootstrap仿淘宝分页控件实现
.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...
- 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》
高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...
随机推荐
- Ruby 连接MySQL数据库
使用Ruby连接数据库的过程还真的是坎坷,于是写点文字记录一下. 简介 Ruby简介 RubyGems简介 包管理之道 比较著名的包管理举例 细说gem 常用的命令 准备 驱动下载 dbi mysql ...
- ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL
ROS机器人程序设计(原书第2版)补充资料 (陆) 第六章 点云 PCL 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. RGBD深度摄像头 ...
- [csdn markdown]使用摘记二 快捷键及导入导出Markdown文件
csdn推出了新的编辑器markdown,对于习惯使用离线编辑的人员来说是个大的福利,比如上班的时候,不能联网,但是又有好些知识点需要记录,等到下班了呢,又想直接把这些排版格式良好的文件直接上传到cs ...
- Android Multimedia框架总结(十一)CodeC部分之AwesomePlayer到OMX服务
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52623882 前言:上篇文< ...
- 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」
假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 ...
- JAVA面向对象-----this的概述
this关键字代表是对象的引用.也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用. 1:没有this会出现什么问题 1:定义Person类 1:有姓名年龄成员变量,有说话的方法. 2 ...
- 如何通过网络连接进行ADB调试
点击打开链接 大家在使用adb调试Android系统时可能会遇到麻烦,比如usb端口只有一个,如果用作adb调试,就不能通过usb连接其它器件,或者usb端口不能使用时也没法进行adb调试. Andr ...
- (一〇四)使用Xcode6创建framework动态静态库
在Xcode6以前,创建framework可以使用iOS-Universal-Framework模板来创建framework,现在苹果已经提供了模板,如下图选择: 使用此模版创建的默认是动态库,方法和 ...
- UNIX网络编程——客户/服务器程序设计示范(四)
TCP预先派生子进程服务器程序,accept使用线程上锁保护 我们使用线程上锁保护accept,因为这种方法不仅适用于同一进程内各线程之间的上锁,而且适用于不同进程之间的上锁. ...
- android fragement报nullexcption错误
,这题目起的够骚情了,原创傲慢的上校哦,转载请标明:http://blog.csdn.net/aomandeshangxiao/article/details/7753421 其实有些方法也是从网上找 ...