ListView系列(一)

ListView的事件监听


ListView是我们Android最常见的控件之一,有必要对他的监听事件做出整理和分析。

ListView的事件包括:

  • OnItemClickListener(ListView子项目的点击事件,不是item上按钮的点击事件
  • OnScrollListener(ListView整体的滑动事件)

下面分别来作简要介绍:

OnItemClickListener:


listview.setOnItemClickListener(
new AdapterView.OnItemClickListener()

给ListView设置item监听需要一个实现onItemClick方法的监听器
对item点击要执行的代码放在onItemClick方法中。


onItemClick
public void onItemClick (AdapterView<?> parent, 
View view, int position, long id )

参数

类型

含义

parent

AdapterView

相当于listview 适配器的一个指针,可以通过它来获得ListView里装着的一切东西,再通俗点就是说告诉你,你点的是哪一个

view

View

就是你点的那个Item的句柄,通过他你可以得到这个item的一切,并且进行相关操作

position

int

确定你所点的item在整个List里的位置(下表从0开始)

id

long

一般情况下id跟position一样(你可以尝试Log下)

Tip:不懂AdaView<?>为何物的童鞋看下来:AbsListView是用于实现条目的虚拟列表的基类. 这里的列表没有空间的定义。 例如,该类的子类可以以网格的形式、走马灯的形式显示,或者作为堆栈等等。

  • 嵌套类 class AbsListView.LayoutParams
    AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。
  • interface AbsListView.OnScrollListener
    为了在列表或网格滚动时执行回调函数而定义的接口。
  • interface AbsListView.RecyclerListener
    RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器.
//继承关系:
        java.lang.Object
            android.view.View
               android.view.ViewGroup
                      android.widget.AdapterView<T extends android.widget.Adapter>
                             android.widget.AbsListView

OnScrollListener

listview.setOnScrollListener(
new AbsListView.OnScrollListener()

给listView设置滑动监听需要实现的onScroll和onScollStateChange方法的监听器

public void onScrollStateChanged(
    AbsListView view, int scrollState)

滑动状态改变时调用

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

滑动时调用


onScrollStateChanged
public void onScrollStateChanged(
AbsListView view, int scrollState)

变量

类型

含义

view

AbsListView

滑动的那个ListVIew

scrollState

int

滑动状态

switch (scrollState){
                    case SCROLL_STATE_IDLE://静止状态
                        break;
                    case SCROLL_STATE_TOUCH_SCROLL://手指在屏幕上滑动状态
                        break;
                    case SCROLL_STATE_FLING://手指停止滑动,屏幕依然在滑动的状态
                        break;
                }
onScroll
public void onScroll(AbsListView view, int firstVisibleItem, 
 int visibleItemCount, int totalItemCount)

变量

类型

含义

view

AbsListView

正在被执行操作的ListView

firstVisiableItem

int

第一个可以被看见的item

visibleItemCount

int

可以被看见的item总数

totalItemCount

int

item总数

此方法在滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。
可以用来判断是否滚动到最后一个(可以用来执行刷新判断,或者进行预加载,当用户看到第几个的时候去执行网络请求,避免给客户造成程序卡顿的错觉。):

firstVisibleItem + visibleItemCount == totalItemCount
 && totalItemCount > 0