Android-StickyNavLayout
Android-StickyNavLayout copied to clipboard
上下滑动 列表 有时会触发OnItemClick事件 ,几率出现
上下滑动 列表 有时会触发OnItemClick事件 ,几率出现
的确存在上述问题,我暂时没时间修复,如果你有好的方案,欢迎PR。我会尽量抽空看下。
private boolean isSticky;//mNav-view 是否悬停的标志 在dispatchTouchEvent方法里增加 case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP://处理悬停后立刻抬起的处理 float distance = y - mLastY; if(isSticky && /distance==0.0f/Math.abs(distance) <= mTouchSlop){ isSticky=false; return true; }else{ isSticky=false; return super.dispatchTouchEvent(ev); } 在onTouchEvent 方法里修改 like this
// 如果topView隐藏,且上滑动时,则改变当前事件为ACTION_DOWN if (getScrollY() == mTopViewHeight && dy < 0) { event.setAction(MotionEvent.ACTION_DOWN); dispatchTouchEvent(event); isInControl = false; isSticky=true; }else{ isSticky=false; }
并修改dispatchTouchEvent 方法 case MotionEvent.ACTION_MOVE: float dy = y - mLastY; getCurrentScrollView();
if (mInnerScrollView instanceof ScrollView) {
if (mInnerScrollView.getScrollY() == 0 && isTopHidden && dy > 0
&& !isInControl) {
isInControl = true;
ev.setAction(MotionEvent.ACTION_CANCEL);
MotionEvent ev2 = MotionEvent.obtain(ev);
dispatchTouchEvent(ev);
ev2.setAction(MotionEvent.ACTION_DOWN);
isSticky=true;
return dispatchTouchEvent(ev2);
}
} else if (mInnerScrollView instanceof ListView) {
ListView lv = (ListView) mInnerScrollView;
View c = lv.getChildAt(lv.getFirstVisiblePosition());
if (!isInControl && c != null && c.getTop() == 0 && isTopHidden
&& dy > 0) {
isInControl = true;
ev.setAction(MotionEvent.ACTION_CANCEL);
MotionEvent ev2 = MotionEvent.obtain(ev);
dispatchTouchEvent(ev);
ev2.setAction(MotionEvent.ACTION_DOWN);
isSticky=true;
return dispatchTouchEvent(ev2);
}
}
break;
即对isSticky赋值
经测试可以修改此bug!!!!忘楼主有时间看下可以不?嘻嘻
看下面这个解决了此问题 https://github.com/ta893115871/StickyNavLayout