最近项目遇到一个个性设置的需求,感觉还是蛮另类的,索性就记录下来,说不定以后就遇见了。
首先来一张需求图吧
可见 第一反应肯定是 Scrollview嵌套 Recyclerview 来写。事实上,我一开始 也确实如此。
然后开始分析 后台给予的数据结构。发现,年龄,品类为同级,而风格,和下面的一大推 是同级 且在 品类 下级。并且品类为单选 ,点击后改变 风格及以下的数据。
分析完毕,思索了一番 ,我准备用 Scrollview 嵌套4个RecyclerView 来实现 。 其中最后一个Recyclerview 再次 嵌套Recyclerview 。
好了思路有了 就开工吧!
不出意外 ,第一次 就能成功显示 全部数据 。要注意的是 Recyclerview 和listview嵌套一样 ,要重新 测量 高度 方法也简单 重写
LinearLayoutManager 和 GridLayoutManager
然后设置
manager.setSmoothScrollbarEnabled(true);
这个国内和国外大牛都有现成的 自行百度。
好了这时候出现了第一个问题,
Scrollview 滑动不流畅很僵硬。这时候就要处理 它的滑动事件了。重写Scrollview
public class MyScrollview extends ScrollView {
private int downX;
private int downY;
private int mTouchSlop;
public MyScrollview(Context context) {
super(context);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
public MyScrollview(Context context, AttributeSet attrs) {
super(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
public MyScrollview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downX = (int) e.getRawX();
downY = (int) e.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int moveY = (int) e.getRawY();
if (Math.abs(moveY - downY) > mTouchSlop) {
return true;
}
}
return super.onInterceptTouchEvent(e);
}
}
好啦第一个问题解决了。
第二个问题,button的选择记录,我的思路是利用HashMap key值为 position ,参数为布尔值。
点击后改变参数,改变button的颜色,需要也是一样。根据这个思路简单的就实现了多选的功能。
第三个问题,关于品类的切换 改变 下面的 数据。我的思路是 在品类的 适配器里 写回调,把position 传回来,在下面两个适配器里写 updata方法,在activity 根据position
传入品类下层 相对应的 position数据 。根据这个思路 解决了 切换数据的 功能。
相应的 出现了 第四个问题。服装 下级 显示正常,切换到其他,只能显示第一条数据。一脸蒙蔽啊!
这时候想到了用NestedScrollView替换Scrollview
设置android:fillViewport="true"
然后给recyclerview设置
allRecycler.setNestedScrollingEnabled(false);
佛珠保佑!!!果然成功。
效果嘛老板满意就行啦。
主要提供思路。。代码嘛因为在项目上,就算了。小伙伴有什么好的建议和问题可以留言哟。