解决NestedScrollView嵌套RecycleView的bug
来源:互联网 发布:阿里云备案流程图 编辑:程序博客网 时间:2024/04/30 06:19
正常情况下NestedScrollView嵌套RecycleView,一是会出现只显示一行的情况,二是滑动异常即事件冲突。
解决方法:
1.也是最简单的方法,把design库和V7库升级到23.2以上,注意加上以下代码
mLinearLayoutManager.setSmoothScrollbarEnabled(true); mLinearLayoutManager.setAutoMeasureEnabled(true); cardslist_view.setLayoutManager(mLinearLayoutManager); cardslist_view.setHasFixedSize(true); cardslist_view.setNestedScrollingEnabled(false);问题即可解决。
2.麻烦一点,重写LinearLayoutManager和NestedScrollView。
public class CustomLinearLayoutManager extends LinearLayoutManager { public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } private int[] mMeasuredDimension = new int[2]; @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { final int widthMode = View.MeasureSpec.getMode(widthSpec); final int heightMode = View.MeasureSpec.getMode(heightSpec); final int widthSize = View.MeasureSpec.getSize(widthSpec); final int heightSize = View.MeasureSpec.getSize(heightSpec); int width = 0; int height = 0; for (int i = 0; i < getItemCount(); i++) { if (getOrientation() == HORIZONTAL) { measureScrapChild(recycler, i, View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), heightSpec, mMeasuredDimension); width = width + mMeasuredDimension[0]; if (i == 0) { height = mMeasuredDimension[1]; } } else { measureScrapChild(recycler, i, widthSpec, View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), mMeasuredDimension); height = height + mMeasuredDimension[1]; if (i == 0) { width = mMeasuredDimension[0]; } } } switch (widthMode) { case View.MeasureSpec.EXACTLY: width = widthSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } switch (heightMode) { case View.MeasureSpec.EXACTLY: height = heightSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } setMeasuredDimension(width, height); } private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, int heightSpec, int[] measuredDimension) { View view = recycler.getViewForPosition(position); recycler.bindViewToPosition(view, position); if (view != null) { RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec, getPaddingLeft() + getPaddingRight(), p.width); int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, getPaddingTop() + getPaddingBottom(), p.height); view.measure(childWidthSpec, childHeightSpec); measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; recycler.recycleView(view); } }}
public class MyNestedScrollView extends NestedScrollView { private int downX; private int downY; private int mTouchSlop; public MyNestedScrollView(Context context) { super(context); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public MyNestedScrollView(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public MyNestedScrollView(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); }}
3 0
- 解决NestedScrollView嵌套RecycleView的bug
- 解决NestedScrollView嵌套RecycleView的bug
- NestedScrollView嵌套RecycleView或RecycleView嵌套RecycleView的bug
- NestedScrollView嵌套RecycleView的问题
- NestedScrollView中嵌套RecycleView
- 解决nestedScrollview 嵌套 recyclerview出现的异常
- recycleview+NestedScrollView+viewpager 解决滑动问题以及recycleview的使用技巧
- NestedScrollView、RecycleView、ViewPager 常见问题汇总,及解决
- 解决NestedScrollView 嵌套 RecyclerView出现的滑动冲突问题
- 解决scrollview嵌套recycleview,recycleview抢走滑动事件的问题
- Recycleview嵌套Recycleview时出现的一个问题-待解决
- 解决RecycleView嵌套RecycleView滑动卡顿的问题
- NestedScrollView嵌套RecycleView滑动卡顿问题处理
- 记录RecycleView的数据错乱BUG解决
- NestedScrollView、RecycleView、ViewPager 等布局方面的常见问题汇总,及解决
- NestedScrollView替代了ScrollView解决嵌套难题
- 解决RecycleView嵌套RecycleView滑动冲突问题
- 解决srcollview嵌套recycleview冲突
- 大数相除 /大数相乘 大数相除是低精度
- 【Objective-C】07-自定义构造方法和description方法
- 4Sum_Leetcode_#18
- MyEclipse设置
- 响应式设计媒体查询尺寸分界点一览表
- 解决NestedScrollView嵌套RecycleView的bug
- 图论模板-最小生成树
- 校招算法之选择排序
- java 多线程 模拟一台电梯的工作状态
- 布隆过滤器(Bloom Filter)详解
- 数据库视频总结
- storm、jstorm 调研系列(一)----jstorm介绍以及与spark的比较,外加一些基础概念
- SpringMVC表单提交路径问题
- Unix/Linux系统概述