NoScrollViewPager解决嵌套listView依然可以滑动的问题
程序员文章站
2022-06-17 19:13:40
...
最近项目中有个需求,使用ViewPager嵌套Fragment,有的Fragment中有listView,ViewPager不可以进行滑动。开始只是重写它的onInterceptHoverEvent与onTouchEvent方法,使之返回false。但是不是这么简单,我们依然可以发现在有listView以及类似的列表控件时,都会让ViewPager有顿顿的滑动效果。并不是屏蔽它的事件分发与处理就可以解决。
于是我简单的下ViewPager的源码,发现scrollTo这个方法不止会在onTouchEvent中进行调用,在其他方法中也会有调用,如setCurrentItemInternal中也会调用。于是我就想会不会因为这个而影响了,我便重写了scrollTo方法,并做了判断,果然有效
上code
public class NoScrollViewPager extends ViewPager {
private static final String TAG = "NoScrollViewPager";
private int mWith;
public NoScrollViewPager(Context context) {
super(context);
initData();
}
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
initData();
}
private void initData() {
int[] screenWithAndHeight = ScreenUtils.getScreenWithAndHeight((Activity) getContext());
mWith = screenWithAndHeight[0];
}
@Override
public boolean onInterceptHoverEvent(MotionEvent event) {
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
@Override
public void scrollBy(int x, int y) {
Log.e(TAG, "scrollBy");
super.scrollBy(x, y);
}
@Override
public void scrollTo(int x, int y) {
Log.e(TAG, "scrollTo-x=" + x);
Log.e(TAG, "scrollTo-y=" + y);
if (x % mWith != 0) {
return;
}
super.scrollTo(x, y);
}
@Override
public void setCurrentItem(int item) {
super.setCurrentItem(item, false);
}
}
推荐阅读
-
Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
-
NoScrollViewPager解决嵌套listView依然可以滑动的问题
-
关于Flutter ListView滑动及嵌套滑动的问题.
-
解决Flutter的ListView嵌套ListView滑动冲突以及无限高度问题
-
解决BottomSheetDialog+Listview出现的滑动冲突问题
-
解决ListView与SwipeRefreshLayout滑动冲突的问题
-
解决ScrollView下嵌套ListView或Gridview进页面不在顶部的问题_html/css_WEB-ITnose
-
解决ScrollView下嵌套ListView或Gridview进页面不在顶部的问题_html/css_WEB-ITnose