数据结构 ->数据重构

  • 原因

    处理这个数据的主要原因是,后台服务器返回的数据格式在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 数据重构(仿淘宝浏览记录,足迹)的更多相关文章

  1. android版高仿淘宝客户端源码V2.3

    android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...

  2. Android自定义控件实战——仿淘宝商品浏览界面

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38656929 用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个Scr ...

  3. Android自己定义控件实战——仿淘宝商品浏览界面

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38656929 用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个Scr ...

  4. Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

    Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...

  5. Android仿淘宝头条滚动广告条

    之前我使用TextView+Handler+动画,实现了一个简单的仿淘宝广告条的滚动,https://download.csdn.net/download/qq_35605213/9660825: 无 ...

  6. Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;

    仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding=&q ...

  7. JS仿淘宝详情页菜单条智能定位效果

    类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"( ...

  8. 基于Bootstrap仿淘宝分页控件实现

    .header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...

  9. 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》

    高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...

随机推荐

  1. UILabel 调整行间距

    /* 调整行间距 */ + (void)adjustLineSpacingOfLabel:(UILabel *)label to:(CGFloat)lineSpacing { NSString *te ...

  2. The new powerful SQL executing schedule monthly or weekly in DB Query Analyzer 7.01

    1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainland. ...

  3. Android TV开发总结(五)TV上屏幕适配总结

    前言:前面几篇总结一些TV上的小Sample,开源到GitHub:https://github.com/hejunlin2013/TVSample, 点击链接,可以持续关注.今天总结下TV上屏幕适配. ...

  4. Android Framework 学习和需要学习的内容

    1. 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework面存一些资料待有空查看. 2.Android系统的层次如下: 3.项目目录简单分析如下: 4.telphony ...

  5. 7.0、Android Studio命令行工具

    命令行工具分成SDK工具和平台工具. SDK工具 SDK工具跟随SDK安装包安装并随时更新. Virtual Device 工具 1. Android Virtual Device Manager 提 ...

  6. javascript之页面打印

    WebBrowser组件是IE内置的浏览器控件,使用时,首先要在<body>标签的下面用<object>...</object>标记声明WebBrowser组件,代 ...

  7. Android简易实战教程--第六话《开发一键锁屏应用2·完成》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...

  8. Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)

    交通灯管理系统的项目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路线行驶的车辆  例如:   由南向而来去往北向的车辆-----直行车辆   由西向而来去往南 ...

  9. Oracle Metalink Notes Collection

    INV Note 123456.1 Latest 11i Applications Recommended Patch List Note 568012.1:FAQ: Inventory Standa ...

  10. 如何在Cocos2D游戏中实现A*寻路算法(七)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...