数据结构 ->数据重构

  • 原因

    处理这个数据的主要原因是,后台服务器返回的数据格式在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. Spark核心类:SQLContext和DataFrame

    http://blog.csdn.net/pipisorry/article/details/53320669 pyspark.sql.SQLContext Main entry point for ...

  2. 1086. Tree Traversals Again (25)

    题目如下: An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For e ...

  3. 06_MyBatis,Spring,SpringMVC整合

     项目结构 Spring的配置: beans.xml <?xml version="1.0" encoding="UTF-8"?> <be ...

  4. 1Nginx+fastdfs分布式文件存储

     准备,将所需的软件传到服务器上,服务器的列表如下: fastdfs-nginx-module_v1.15.tar.gz FastDFS_v4.06.tar.gz libevent-2.0.21- ...

  5. 6. React 表单使用介绍

            表单是前端页面中非常重要也是非常常用的一个内容,react 也在表单方面进行了很多封装,让开发者可以方便快捷地在 react 组件中使用表单.下面介绍如何在组件中正确的使用表单,从而可 ...

  6. Ruby开发入门

    开发环境搭建 首先安装Ruby SDK,我安装的版本是2.0.之后安装IDE,这里用的是Jetbrain的RubyMine 5.4.3,注意是否支持对应版本的Ruby SDK. 一段神奇的注册码... ...

  7. 【Unity Shaders】Vertex Magic —— 访问顶点颜色

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  8. input事件--->按键事件的基本实现

    本程序基于TINY4412开发板,程序已经验证过,完全正确: 那么,如何来写这样的一个驱动程序呢? 1.分配一个input_dev结构体 2.设置 3.注册 4.硬件相关的代码,比如中断,定时器,休眠 ...

  9. MyBatis进阶(一)运行原理

    初次学习MyBatis,自己花了不少时间,理解一件事物是需要时间的.经过多次反复的理解,你的认知能力就可以得到提升.以下是学习MyBatis的一些理解认识,技术理解上若有不当之处,敬请朋友们提出宝贵意 ...

  10. Android开发技巧——实现底部图标文字的导航栏(已更新)

    本文章的导航栏代码参考了viewpagerindicator的实现.本文叙述的是之前版本的qq或微信中,底部的图标加文字的导航栏的实现. 2014-09-14 13:59:42更新:library的代 ...