Android 开发时,最常用的控件之一就是ListView了,而使用ListView的同时,必然需要对它设置监听器,常用的监听器有这么几个:
  1. OnItemClickListener // 监听器在点击该子项时触发;
  2. OnTouchListener     // 监听器在触碰到ListView时触发;
  3. OnScrollListener     // 监听器在ListView滚动时触发。

下面几个例子分别表述了具体处理的办法:

1. OnItemClickListener:

 class ItemClickEvent implements AdapterView.OnItemClickListener {

     @Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// TODO Auto-generated method stub
// parent.setVisibility(View.GONE); // 对子项处理的办法 // BtnCheck(0);
System.out.println(position);
}
}

2. OnTouchListener:

 class ItemTouchEvent implements View.OnTouchListener {

     @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
// System.out.println("触摸..");
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// System.out.println("MOVE"); // 触摸滑动ListView时
BtnCheck(0);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// System.out.println("up"); // 离开ListView时
BtnCheck(currentPage);
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
// System.out.println("down"); // 开始接触到ListView时
BtnCheck(0);
} return false;
} }

不仅仅只有上面的三种Action状态,MotionEvent类中还定义了很多其它状态,我们可以灵活的使用这些状态

  • MotionEvent.ACTION_DOWN:开始触摸;
  • MotionEvent.ACTION_MOVE:触摸移动;
  • MotionEvent.ACTION_UP:触摸抬起;
  • MotionEvent.ACTION_OUTSIDE:触摸范围超过了UI边界;
  • MotionEvent.ACTION_CANCEL:触摸被取消时(当用户保持按下操作,并从你的控件转移到外层控件时,会触发ACTION_CANCEL);
  • MotionEvent.ACTION_POINTER_DOWN:当有另外一个触摸按下时(多点触摸);
  • MotionEvent.ACTION_POINTER_UP:当另一个触摸抬起时(多点触摸)。

3. OnScrollListener:

 class LvScrollEvent implements AbsListView.OnScrollListener {

     @Override
public void onScroll(AbsListView view, int firstVisibleItem,
                  int visibleItemCount, int totalItemCount) { // 监听滑动
// TODO Auto-generated method stub } @Override
public void onScrollStateChanged(AbsListView view, int scrollState) { // 监听滑动状态的改变
// TODO Auto-generated method stub
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE: //
BtnCheck(currentPage);
// mBusy = false;
System.out.println("停止...");
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
BtnCheck(0);
// mBusy = true;
System.out.println("正在滑动...");
break;
case OnScrollListener.SCROLL_STATE_FLING:
BtnCheck(0);
// mBusy = true;
System.out.println("开始滚动..."); break;
}
} }

3.1 OnScrollSateChanged() 方法

OnScrollSateChanged根据scrollState来决定其回调的次数,它有三种模式:

  • OnScrollListener.SCROLL_STATE_IDLE:滚动停止时的状态
  • OnScrollListener.SCROLL_STATE_STOUCH_SCROLL:触摸正在滚动,手指还没离开界面时的状态
  • OnScrollListener.SCROLL_STATE_FLING:用户在用力滑动后,ListView由于惯性将继续滑动时的状态

当用户没有用力滑动时,OnScrollSateChanged方法只会回调2次,否则回调三次,我们在使用时通常会以设置Flag标志,来区分不同的滑动状态,从而进行相应的处理。

3.2 OnScroll() 方法

在ListView滚动时会一直被回调,它通过里面有三个参数来显示当前ListView的滚动状态 :

  • firstVisibleItem:当前能看见的第一个item的ID(从0开始);
  • visibleItemCount:当前可见的item总数;
  • totalItemCount:列表中适配器总数量,也就是整个ListView中item总数。

注意:当前可见的item总数,包括屏幕中没有显示完整的item,如显示一半的item也会算在可见范围内  通过这三个参数,我么可以实现很多事件判断,如:

(1)判断当前是否滑动到最后一行 

当前视图中第一个item的ID加上当前屏幕中可见item的总数如果等于ListView中所有item总数时,就表示移动到了最后一行

 if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {
// 滚动到最后一行了
}

(2)判断滑动的方向 

通过oldVisibleItem 记录上一次firstVisibleItem的位置,再与滑动后的firstVisibleItem进行比较,就可得知滑动的方向

 if (firstVisibleItem > oldVisibleItem) {
// 向上滑动
}
if (firstVisibleItem < oldVisibleItem) {
// 向下滑动
}
oldVisibleItem = firstVisibleItem;

ListView也为我们提供了一些封装好了的方法,来获取item的位置信息

 // 获取当前可见区域内第一个item 的position
mListView.getFirstVisiblePosition(); // 获取当前可见区域内最后一个item 的position
mListView.getLastVisiblePosition();

Android 关于在Activity中监听ListView的更多相关文章

  1. android activity中监听View测量完成的4种方式

    在开发中经常碰到需要在activity初始化完成后获得控件大小的情况. 但是这个操作我们不能在oncreate.onresume等生命周期方法中调用,因为我们不知道何时view才能初始化完成 为此,特 ...

  2. Android中监听ListView滑动到底部

    Android中的应用就是ListView中向下滑动加载更多的功能,不要再onScroll方法中进行判断,那样当滑动到底部的时候,触摸屏幕就会又去加载更多,效果很差,可以自行测试一下: listvie ...

  3. Android:监听ListView

    本文目录 监听ListView点击事件 监听ListView滚动事件 监听ListView点击事件 使用监听器OnItemClickListener package com.example.tests ...

  4. 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

    在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...

  5. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向

    很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...

  6. Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

    本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.c ...

  7. Android 监听ListView、GridView滑动到底部

    // 监听listview滚到最底部 mIndexList.setOnScrollListener(new OnScrollListener() { @Override public void onS ...

  8. Fragment中监听onKey事件,没你想象的那么难。

    项目中越来越多的用到Fragment,在用Fragment取代TabHost的时候遇到了一个问题,我们都知道,TabHost的Tab为Activity实例,有OnKey事件,但是Fragment中没有 ...

  9. Android-服务中监听电源键和Home键的广播、在锁屏下仍然工作的方法

    Android-服务中监听电源键和Home键的广播  http://blog.csdn.net/u014657752/article/details/49512485 Android开发之如何监听让服 ...

随机推荐

  1. 模板专业化和模板偏特样片(template specialization and partial template specialization)

    测试环境: win7 64 g++ 4.8.1 /*************************************************************************** ...

  2. 快速构建Windows 8风格应用32-构建辅助磁贴

    原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...

  3. DDD分层架构之领域实体(验证篇)

    DDD分层架构之领域实体(验证篇) 在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容—— ...

  4. CentOS上安装WordPress搭建博客平台

    前两天在服务器上搭建了AMP,今天试着在上面安装了一个WordPress(中文:http://cn.wordpress.org/,英文:http://wordpress.org/),我安装的是英文最新 ...

  5. Asterisk 未来之路3.0_0001

    原文:Asterisk 未来之路3.0_0001 第一章:电信技术革命 刚开始他们忽视你,然后他们嘲笑你,然后他们向你挑战,最后你赢了 ---Mahatma Ganhdi 在5年前,我最初规划写一本关 ...

  6. [译]ava 设计模式之构造器

    (文章翻译自Java Design Pattern: Builder) 构造器模式的关键之处在于它使用一步接招一步的流程去构建东西,例如:尽管构建的每一步是不相同的但是每一个产品还是遵循相同的流程. ...

  7. PLSQL配置登录用户信息

    PLSQL配置登录用户信息 2012-08-30 08:47:02     我来说两句      作者:lsxy117 收藏    我要投稿 PLSQL配置登录用户信息   工作中经常使用PLSQL ...

  8. EnterpriseLibrary 6.0(微软企业库6.0学习笔记) 之Data Access Block 配置和获取链接字符串

    EnterpriseLibrary 的特点是快速开发,融合了微软工程师多年的经验,现在在微软内部有专门的一个小组在完善EnterpriseLibray,最近的更新时间是April 2013. 相关链接 ...

  9. Javascript多线程引擎(十)---Web服务器

     Javascript多线程引擎(十)---Web服务器 经过一天的努力, 引擎可以支持web服务的功能了并且支持UTF-8的编码, 具有对HTTP参数的解析,状态码的配置, 响应报文的输出等. 提供 ...

  10. centos 4.4配置使用 and Nutch搜索引擎(第1期)_ Nutch简介及安装

    centos 4.4配置使用 1.Nutch简介 Nutch是一个由Java实现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的 ...