美文网首页
recyclerView分组悬浮 上拉刷新 动态中文key

recyclerView分组悬浮 上拉刷新 动态中文key

作者: 那个唐僧 | 来源:发表于2017-07-04 16:05 被阅读681次

    需求: 列表数据,有分组,需要悬浮,另外需要支持上拉刷新.
    坐我旁边的被我鄙视的IOS分分钟实现了.特么的.IOS系统自带这个分组悬浮控件.................
    瞬间万只马儿奔腾而过啊.....

    抽根烟冷静一下...

    效果如下:

    b.gif

    差不多原项目效果就这样子....只是不同的区别在于数据是网络请求的而已.

    总体来说走了很多坑..真是坑的吐血了都

    好了,吐完血还是继续写吧

    服务器返回动态key

    Iterator in = object.getJSONObject("data").getJSONObject("list").keys();
                        while (in.hasNext()) {
                            String key = in.next() + "";
                            map.put(key, object.getJSONObject("data").getJSONObject("list").get(key));
                        }
    

    这样得到动态的key和每个key对应数组的值,只不过我们的key是中文的.对,没看错,是中文的,高大上,.很骚...

    接下来添加数据

    Set<Map.Entry<String, Object>> entryseSet = map.entrySet();
                        for (Map.Entry<String, Object> entry : entryseSet) {
                            System.out.println(entry.getKey() + "," + entry.getValue());
                            mKeys.add(entry.getKey()); //添加每个key
                            JSONArray arr = object.getJSONObject("data").getJSONObject("list").getJSONArray(entry.getKey());
                            List<DatasBean> sss = new ArrayList<DatasBean>();
                            for (int i = 0; i < arr.length(); i++) {
                                //得到每个value中的bean类并添加
                                Gson g = new Gson();
                                DatasBean datasBean = g.fromJson(arr.getJSONObject(i).toString(), DatasBean.class);
                                sss.add(datasBean);
                            }
                            datas.put(jj, sss);
                            jj++;
                        }
    

    这里添加的是每个key所对应的value的值的集合

     if (nextPage == 1) {
                            for (int i = 0; i < datas.size(); i++) {
                                keys.put(list.size(), mKeys.get(i));
                                for (int j = 0; j < datas.get(i).size(); j++) {
                                    list.add(datas.get(i).get(j));
                                }
                            }
                            flagI = datas.size();
                        } else {
                            for (int i = flagI; i < datas.size(); i++) {
                                keys.put(list.size(), mKeys.get(i));
                                for (int j = 0; j < datas.get(i).size(); j++) {
                                    list.add(datas.get(i).get(j));
                                }
                            }
                        }
    

    这里是请求的分页..

    mAdapter = new RvAdapter(list, this);
                layoutManager = new LinearLayoutManager(this);
                FloatingItemDecoration floatingItemDecoration = new FloatingItemDecoration(this, getResources().getColor(R.color.colorAccent), 1, 0);
                floatingItemDecoration.setKeys(keys);
                floatingItemDecoration.setmTitleHeight((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()));
                mRecyclerView.addItemDecoration(floatingItemDecoration);
                //设置布局管理器
                keys.clear();
                layoutManager.setOrientation(1);
                mRecyclerView.setLayoutManager(layoutManager);
                mRecyclerView.setAdapter(mAdapter);
                if (nextPage != 1) {
                    MoveToPosition(layoutManager,mRecyclerView,mAdapter.getItemCount()-10);
                    mAdapter.getStatus(1);
                }
    

    设置adapter...
    这是demo的一部分...
    做这种效果在网上找了很多很多例子,下载了很多很多源码.要么就是每个key对应的value值是固定的,要么就是不能刷新,要么就是刷新了之后分割线都会在重新绘制一遍.我这里算是个投机取巧的吧,因为每次刷新的时候都会重新绘制一遍item的分割线,这样的话刷新的次数多了item之间的分割线就会很大很大.这样就难看的要死,不敢刷新了..咋整呢,想办法呗,我没有弄item之间的普通分割线,我给每个item的头部布局里添加了分割线效果,这样,就是刷一万遍,item的分割线也不会重新绘制....可能我这个真不是啥正解,但是项目急,留给中国队的时间不多了,能解决问题就先这样吧,有时间了在重新搞,搞好,搞的优美一些..
    源码戳我

    相关文章

      网友评论

          本文标题:recyclerView分组悬浮 上拉刷新 动态中文key

          本文链接:https://www.haomeiwen.com/subject/vofxhxtx.html