商城个性设置,Scrollview嵌套 多层recyclerview 切换、收起展开

来源:互联网 发布:p值计算软件 编辑:程序博客网 时间:2024/06/01 22:19

最近项目遇到一个个性设置的需求,感觉还是蛮另类的,索性就记录下来,说不定以后就遇见了。


首先来一张需求图吧















可见 第一反应肯定是 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);

佛珠保佑!!!果然成功。

效果嘛老板满意就行啦。

主要提供思路。。代码嘛因为在项目上,就算了。小伙伴有什么好的建议和问题可以留言哟。


原创粉丝点击