android ListView OnScrollListener

本文详细介绍了Android中ListView和GridView的滑动监听器OnScrollListener的使用,包括其回调方法onScrollStateChanged和onScroll的逻辑。讨论了滑动状态的三个常量,以及onScroll方法中的firstVisibleItem、visibleItemCount和totalItemCount参数的含义,并通过实例展示了滑动过程中的状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OnScrollListener  是用于监听ListView 和GridView 滑动时候的监听事件。

其回调方法有俩

滑动状态改变的监听 ,注意,是 状态        ⬇️⬇️⬇️

   public void onScrollStateChanged(AbsListView view, int scrollState);

滑动进行时的监听

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

英文好的可以直接看API,英文差的就往下看。

首先是 onScrollStateChanged 的 scrollState ,光看名字就知道这货一定是个常量,点击 OnScrollListener 源码发现三个常量。

   public static int SCROLL_STATE_IDLE = 0;

   public static int SCROLL_STATE_TOUCH_SCROLL = 1;
   public static int SCROLL_STATE_FLING = 2;

第一个 是 滑动停止 时候返回的 状态。

第二个 是 滑动进行时,而且你的手指还在屏幕上 回调的。

第三个 是 滑动进行时,手指已经不再屏幕上回调的。

然后是onScroll方法,这个函数会在滑动时候 回调。这个函数比较简单,光从常量的名字上就能猜到,我这里就简单的翻译一下了。

firstVisibleItem 屏幕可见的第一条 item的下标

   visibleItemCount 屏幕中可以见看见的item 条数\

   totalItemCount   ListView或者GridView中Adapter数据的总条数


下面来验证一下

Android代码大概长这样

@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        data = new ArrayList<String>();
        mAdapter = new MainAdapter(data, this);

        for (int i = 'a'; i < 'z'; i++)
        {
            data.add(((char) i) + "");
        }
        mMainLv.setAdapter(mAdapter);
        mMainLv.setOnScrollListener(this);
    }

1. ListView处理处于最上面,也是显示的第一条数据时,向上滑动

         

可以看到 onScroll 最先执行,然后才是状态的改变

第一条 Item 下标 ----> 0

当前屏幕显示      ----> 9

adapter的总条数----->25

状态 为 1  ——》2 ——》0

翻译一下

状态 为 滑动且手指在屏幕-----》滑动-----》停止


2.向下滑动几个item的距离

...此处略过

可以看到除了调用了茫茫多的 onScroll 意外,状态仅仅为 1 ---> 0 ,因为没有多余的滑动,手指离开及停止


3. 猛的向下滑动

...同上

(图片上次好似失败了 - - .)

除了茫茫多的onScroll ,状态顺序和 第一次滑动的顺序一模一样 。


//基本讲解就到这里,有机会会放上一些实际使用的案例 TODO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值