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