需求: 列表数据,有分组,需要悬浮,另外需要支持上拉刷新.
坐我旁边的被我鄙视的IOS分分钟实现了.特么的.IOS系统自带这个分组悬浮控件.................
瞬间万只马儿奔腾而过啊.....
抽根烟冷静一下...
效果如下:
差不多原项目效果就这样子....只是不同的区别在于数据是网络请求的而已.
总体来说走了很多坑..真是坑的吐血了都
好了,吐完血还是继续写吧
服务器返回动态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的分割线也不会重新绘制....可能我这个真不是啥正解,但是项目急,留给中国队的时间不多了,能解决问题就先这样吧,有时间了在重新搞,搞好,搞的优美一些..
源码戳我