在ListView中检测向上滚动和向下滚动

我有以下要求:


首先,从服务器获取第2页的数据,并将这些项填充到ListView中。

考虑到方案中的上一页和下一页都可用,因此添加了以下代码:


 if(prevPageNo > 0){

    mListViewActual.setOnScrollListener(this);

 }


 if(nextPageNo > 0){

    mListViewActual.setOnScrollListener(this);

 }

我应该在什么条件下使用以下方法检测向上滚动和向下滚动:


void onScroll(AbsListView视图,int firstVisibleItem,int visibleItemCount,int totalItemCount)

void onScrollStateChanged(AbsListView view,int scrollState)

在操作之后:检测到向上滚动和向下滚动,相应地,将调用上一页no或下一页no的服务,以提取要在Listview中填充的项目。


任何输入都会有所帮助。


至尊宝的传说
浏览 548回答 3
3回答

翻阅古今

尝试使用setOnScrollListener并使用scrollState实现onScrollStateChangedsetOnScrollListener(new OnScrollListener(){&nbsp; &nbsp; public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {&nbsp; &nbsp; &nbsp; // TODO Auto-generated method stub&nbsp; &nbsp; }&nbsp; &nbsp; public void onScrollStateChanged(AbsListView view, int scrollState) {&nbsp; &nbsp; &nbsp; // TODO Auto-generated method stub&nbsp; &nbsp; &nbsp; final ListView lw = getListView();&nbsp; &nbsp; &nbsp; &nbsp;if(scrollState == 0)&nbsp;&nbsp; &nbsp; &nbsp; Log.i("a", "scrolling stopped...");&nbsp; &nbsp; &nbsp; &nbsp; if (view.getId() == lw.getId()) {&nbsp; &nbsp; &nbsp; &nbsp; final int currentFirstVisibleItem = lw.getFirstVisiblePosition();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (currentFirstVisibleItem > mLastFirstVisibleItem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mIsScrollingUp = false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.i("a", "scrolling down...");&nbsp; &nbsp; &nbsp; &nbsp; } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mIsScrollingUp = true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.i("a", "scrolling up...");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; mLastFirstVisibleItem = currentFirstVisibleItem;&nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; }&nbsp; });

慕尼黑5688855

这是一个简单的实现:lv.setOnScrollListener(new OnScrollListener() {&nbsp; &nbsp; &nbsp; &nbsp; private int mLastFirstVisibleItem;&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onScrollStateChanged(AbsListView view, int scrollState) {&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onScroll(AbsListView view, int firstVisibleItem,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int visibleItemCount, int totalItemCount) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(mLastFirstVisibleItem<firstVisibleItem)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.i("SCROLLING DOWN","TRUE");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(mLastFirstVisibleItem>firstVisibleItem)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.i("SCROLLING UP","TRUE");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mLastFirstVisibleItem=firstVisibleItem;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });如果需要更高的精度,可以使用此自定义ListView类:import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.AbsListView;import android.widget.ListView;/**&nbsp;* Created by root on 26/05/15.&nbsp;*/public class ScrollInterfacedListView extends ListView {&nbsp; &nbsp; private OnScrollListener onScrollListener;&nbsp; &nbsp; private OnDetectScrollListener onDetectScrollListener;&nbsp; &nbsp; public ScrollInterfacedListView(Context context) {&nbsp; &nbsp; &nbsp; &nbsp; super(context);&nbsp; &nbsp; &nbsp; &nbsp; onCreate(context, null, null);&nbsp; &nbsp; }&nbsp; &nbsp; public ScrollInterfacedListView(Context context, AttributeSet attrs) {&nbsp; &nbsp; &nbsp; &nbsp; super(context, attrs);&nbsp; &nbsp; &nbsp; &nbsp; onCreate(context, attrs, null);&nbsp; &nbsp; }&nbsp; &nbsp; public ScrollInterfacedListView(Context context, AttributeSet attrs, int defStyle) {&nbsp; &nbsp; &nbsp; &nbsp; super(context, attrs, defStyle);&nbsp; &nbsp; &nbsp; &nbsp; onCreate(context, attrs, defStyle);&nbsp; &nbsp; }&nbsp; &nbsp; @SuppressWarnings("UnusedParameters")&nbsp; &nbsp; private void onCreate(Context context, AttributeSet attrs, Integer defStyle) {&nbsp; &nbsp; &nbsp; &nbsp; setListeners();&nbsp; &nbsp; }&nbsp; &nbsp; private void setListeners() {&nbsp; &nbsp; &nbsp; &nbsp; super.setOnScrollListener(new OnScrollListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private int oldTop;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private int oldFirstVisibleItem;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onScrollStateChanged(AbsListView view, int scrollState) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (onScrollListener != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onScrollListener.onScrollStateChanged(view, scrollState);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (onScrollListener != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (onDetectScrollListener != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onDetectedListScroll(view, firstVisibleItem);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private void onDetectedListScroll(AbsListView absListView, int firstVisibleItem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; View view = absListView.getChildAt(0);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int top = (view == null) ? 0 : view.getTop();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (firstVisibleItem == oldFirstVisibleItem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (top > oldTop) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onDetectScrollListener.onUpScrolling();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (top < oldTop) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onDetectScrollListener.onDownScrolling();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (firstVisibleItem < oldFirstVisibleItem) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onDetectScrollListener.onUpScrolling();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onDetectScrollListener.onDownScrolling();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldTop = top;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldFirstVisibleItem = firstVisibleItem;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void setOnScrollListener(OnScrollListener onScrollListener) {&nbsp; &nbsp; &nbsp; &nbsp; this.onScrollListener = onScrollListener;&nbsp; &nbsp; }&nbsp; &nbsp; public void setOnDetectScrollListener(OnDetectScrollListener onDetectScrollListener) {&nbsp; &nbsp; &nbsp; &nbsp; this.onDetectScrollListener = onDetectScrollListener;&nbsp; &nbsp; }&nbsp; &nbsp; public interface OnDetectScrollListener {&nbsp; &nbsp; &nbsp; &nbsp; void onUpScrolling();&nbsp; &nbsp; &nbsp; &nbsp; void onDownScrolling();&nbsp; &nbsp; }}使用示例:(不要忘记将其作为Xml标签添加到您的layout.xml中)scrollInterfacedListView.setOnDetectScrollListener(new ScrollInterfacedListView.OnDetectScrollListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onUpScrolling() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Do your thing&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onDownScrolling() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Do your thing&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android