Android-StickyNavLayout icon indicating copy to clipboard operation
Android-StickyNavLayout copied to clipboard

上下滑动 列表 有时会触发OnItemClick事件 ,几率出现

Open ta893115871 opened this issue 9 years ago • 3 comments

上下滑动 列表 有时会触发OnItemClick事件 ,几率出现

ta893115871 avatar Sep 19 '15 04:09 ta893115871

的确存在上述问题,我暂时没时间修复,如果你有好的方案,欢迎PR。我会尽量抽空看下。

hongyangAndroid avatar Sep 19 '15 04:09 hongyangAndroid

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!!!!忘楼主有时间看下可以不?嘻嘻

ta893115871 avatar Oct 12 '15 02:10 ta893115871

看下面这个解决了此问题 https://github.com/ta893115871/StickyNavLayout

ta893115871 avatar Jan 07 '16 06:01 ta893115871