[java] view plain copy
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) { Log.d("ListView", "##### 滚动到顶部 #####"); } else if ((firstVisibleItem + visibleItemCount) == totalItemCount) { Log.d("ListView", "##### 滚动到底部 ######"); } } });这一段代码并不能够精确地判断 ListView 是否到达最顶部或者最底部。因为只要ListView中第一个item出现在屏幕上端,即使只出现一部分,firstVisibleItem 的值也依然为0, onScroll()回调就会发生; 同样ListView 的最后一个 item 即使只显示一部分,((firstVisibleItem + visibleItemCount) == totalItemCount) 的值也是等于totalItemCount。
Android上ListView默认行都是置顶的,在实际情况下可能需要设置距离顶部的距离,今天设置一下布局
[html] view plain copy
<ListView android:id="@+id/agenda_view" android:paddingLeft="8dp" android:paddingRight="8dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="15dp" android:dividerHeight="6dp"> </ListView>
的确实现了listview距离顶部有一段距离,但是出现了一个问题,那就是那段距离不会随着listview的滑动而滑动上去,后来搜索了一下只需要设置clipToPadding属性即可
[html] view plain copy
<ListView android:clipToPadding="false" android:id="@+id/agenda_view" android:paddingLeft="8dp" android:paddingRight="8dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="15dp" android:dividerHeight="6dp"> </ListView>clipToPadding用来定义ViewGroup是否允许在padding中绘制。默认情况下,cliptopadding被设置为ture, 也就是把padding中的值都进行裁切了
Adapter中重写getItem()方法获取item对象
@Override public Object getItem(int position) { return this.getView(position, null, gridView); }