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

2017-07-04  本文已影响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的分割线也不会重新绘制....可能我这个真不是啥正解,但是项目急,留给中国队的时间不多了,能解决问题就先这样吧,有时间了在重新搞,搞好,搞的优美一些..
源码戳我

上一篇下一篇

猜你喜欢

热点阅读