数据结构 ->数据重构

  • 原因

    处理这个数据的主要原因是,后台服务器返回的数据格式在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. Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室

    思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的 ...

  2. 【安卓开发】为什么不能往Android的Application对象里存储数据

    在一个App里面总有一些数据需要在多个地方用到.这些数据可能是一个 session token,一次费时计算的结果等.通常为了避免activity之间传递对象的开销 ,这些数据一般都会保存到持久化存储 ...

  3. x264源代码简单分析:滤波(Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  4. 关于MT8127中sdk的编译出错问题

    今天在看MTK提供的SDK编译文档,按照步骤做,结果出错了,文档如下: 2- Building an SDK for MacOS and Linux ------------------------- ...

  5. ENVI自带的非监督分类测试情况

    最近写了两个关于遥感图像的简单的非监督分类算法KMEAN和ISODATA,发现结果和ENVI的一直有差异,而且还蛮大的,找了好久也没有找到原因.于是用PS自己绘制了一个简单的图像用于测试.如图1所示, ...

  6. scala学习笔记1(表达式)

    <pre name="code" class="plain">//Scala中的 main 函数需要存在于 object 对象中,我们需要一个obj ...

  7. SDL2源代码分析1:初始化(SDL_Init())

    ===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...

  8. C++对C的函数拓展 - 默认参数

    1 C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替 void myPrint(int x = 3) { printf("x:%d& ...

  9. Common Bit Tasks

    1) If you XOR a bit with its own negated value, you will always get 1. Therefore thesolution to a ^ ...

  10. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法, ...