为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2019-11-12 09:52:44
我有以下要求:首先,从服务器获取第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中填充的项目。任何输入都会有所帮助。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

尝试使用setOnScrollListener并使用scrollState实现onScrollStateChanged


setOnScrollListener(new OnScrollListener(){

    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

      // TODO Auto-generated method stub

    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {

      // TODO Auto-generated method stub

      final ListView lw = getListView();


       if(scrollState == 0) 

      Log.i("a", "scrolling stopped...");



        if (view.getId() == lw.getId()) {

        final int currentFirstVisibleItem = lw.getFirstVisiblePosition();

         if (currentFirstVisibleItem > mLastFirstVisibleItem) {

            mIsScrollingUp = false;

            Log.i("a", "scrolling down...");

        } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {

            mIsScrollingUp = true;

            Log.i("a", "scrolling up...");

        }


        mLastFirstVisibleItem = currentFirstVisibleItem;

    } 

    }

  });


查看完整回答
反对 回复 2019-11-12
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

这是一个简单的实现:


lv.setOnScrollListener(new OnScrollListener() {

        private int mLastFirstVisibleItem;


        @Override

        public void onScrollStateChanged(AbsListView view, int scrollState) {


        }


        @Override

        public void onScroll(AbsListView view, int firstVisibleItem,

                int visibleItemCount, int totalItemCount) {


            if(mLastFirstVisibleItem<firstVisibleItem)

            {

                Log.i("SCROLLING DOWN","TRUE");

            }

            if(mLastFirstVisibleItem>firstVisibleItem)

            {

                Log.i("SCROLLING UP","TRUE");

            }

            mLastFirstVisibleItem=firstVisibleItem;


        }

    });

如果需要更高的精度,可以使用此自定义ListView类:


import android.content.Context;

import android.util.AttributeSet;

import android.view.View;

import android.widget.AbsListView;

import android.widget.ListView;


/**

 * Created by root on 26/05/15.

 */

public class ScrollInterfacedListView extends ListView {



    private OnScrollListener onScrollListener;

    private OnDetectScrollListener onDetectScrollListener;


    public ScrollInterfacedListView(Context context) {

        super(context);

        onCreate(context, null, null);

    }


    public ScrollInterfacedListView(Context context, AttributeSet attrs) {

        super(context, attrs);

        onCreate(context, attrs, null);

    }


    public ScrollInterfacedListView(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

        onCreate(context, attrs, defStyle);

    }


    @SuppressWarnings("UnusedParameters")

    private void onCreate(Context context, AttributeSet attrs, Integer defStyle) {

        setListeners();

    }


    private void setListeners() {

        super.setOnScrollListener(new OnScrollListener() {


            private int oldTop;

            private int oldFirstVisibleItem;


            @Override

            public void onScrollStateChanged(AbsListView view, int scrollState) {

                if (onScrollListener != null) {

                    onScrollListener.onScrollStateChanged(view, scrollState);

                }

            }


            @Override

            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

                if (onScrollListener != null) {

                    onScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);

                }


                if (onDetectScrollListener != null) {

                    onDetectedListScroll(view, firstVisibleItem);

                }

            }


            private void onDetectedListScroll(AbsListView absListView, int firstVisibleItem) {

                View view = absListView.getChildAt(0);

                int top = (view == null) ? 0 : view.getTop();


                if (firstVisibleItem == oldFirstVisibleItem) {

                    if (top > oldTop) {

                        onDetectScrollListener.onUpScrolling();

                    } else if (top < oldTop) {

                        onDetectScrollListener.onDownScrolling();

                    }

                } else {

                    if (firstVisibleItem < oldFirstVisibleItem) {

                        onDetectScrollListener.onUpScrolling();

                    } else {

                        onDetectScrollListener.onDownScrolling();

                    }

                }


                oldTop = top;

                oldFirstVisibleItem = firstVisibleItem;

            }

        });

    }


    @Override

    public void setOnScrollListener(OnScrollListener onScrollListener) {

        this.onScrollListener = onScrollListener;

    }


    public void setOnDetectScrollListener(OnDetectScrollListener onDetectScrollListener) {

        this.onDetectScrollListener = onDetectScrollListener;

    }



    public interface OnDetectScrollListener {


        void onUpScrolling();


        void onDownScrolling();

    }


}

使用示例:(不要忘记将其作为Xml标签添加到您的layout.xml中)


scrollInterfacedListView.setOnDetectScrollListener(new ScrollInterfacedListView.OnDetectScrollListener() {

            @Override

            public void onUpScrolling() {

               //Do your thing

            }


            @Override

            public void onDownScrolling() {


             //Do your thing

            }

        });


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 547 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信