android之XListview,上拉下拉出现BUG

第一次发,不要吐槽哈

上拉加载若屏幕数据不满会出bug;若上拉后再去下拉也会出现bug,即数据跟着手势移动不复原

上拉加载,数据未充满屏幕时出现bug,解决方式:在XListView中去掉onTouchEvent()方法中default下的else

public boolean onTouchEvent(MotionEvent ev) {
if (mLastY == -1) {
mLastY = ev.getRawY();
}


switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mLastY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
final float deltaY = ev.getRawY() - mLastY;
mLastY = ev.getRawY();
System.out.println("数据监测:" + getFirstVisiblePosition() + "---->"
+ getLastVisiblePosition());
if (getFirstVisiblePosition() == 0
&& (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) {
// the first item is showing, header has shown or pull down.
updateHeaderHeight(deltaY / OFFSET_RADIO);
invokeOnScrolling();
} else if (getLastVisiblePosition() == mTotalItemCount - 1
&& (mFooterView.getBottomMargin() > 0 || deltaY < 0)) {
// last item, already pulled up or want to pull up.
updateFooterHeight(-deltaY / OFFSET_RADIO);
}
break;
default:
mLastY = -1; // reset
if (getFirstVisiblePosition() == 0) {
// invoke refresh
if (mEnablePullRefresh
&& mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
mPullRefreshing = true;
mHeaderView.setState(XListViewHeader.STATE_REFRESHING);
if (mListViewListener != null) {
mListViewListener.onRefresh();
}
}
resetHeaderHeight();
resetHeaderHeight();
}else if (getLastVisiblePosition() == mTotalItemCount - 1) {        //解决方式:将此处的else去掉即可
// invoke load more.
if (mEnablePullLoad
&& mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {
startLoadMore();
}
resetFooterHeight();
}
break;
}
return super.onTouchEvent(ev);
}

对于如果上拉了再下拉,有时会出现bug(上拉后再下拉,数据会跟着手势移动往下移,直到移动到屏幕底部才复原),本人把XListView研究了好久发现了解决方式:也是在上述代码操作,将代码更改成如下

default:
mLastY = -1; // reset
if (getFirstVisiblePosition() == 0) {
// invoke refresh
if (mEnablePullRefresh
&& mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
mPullRefreshing = true;
mHeaderView.setState(XListViewHeader.STATE_REFRESHING);
if (mListViewListener != null) {
mListViewListener.onRefresh();
}
}
resetHeaderHeight();
}else if (getLastVisiblePosition() == mTotalItemCount - 1) { 
// invoke load more.
if (mEnablePullLoad
&& mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {
startLoadMore();
}
resetFooterHeight();

resetHeaderHeight();//解决方式:如果没这句话,导致,如果先上拉加载,再下拉,会出现bug
}
--------------------- 
作者:晨兮_夏哥 
来源:CSDN 
原文:https://blog.csdn.net/gsw333/article/details/46891371 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/u014644594/article/details/83995972
今日推荐