昨天简单的看了一下ScrollView的例子,虽然能够实现拉到底触发监听,可是Listview和gridview自己就自带了下拉属性,因此不须要ScrollView来实现。ide
那么在Listview和gridview中怎么把到底自动刷新数据实现呢?spa
在这两个组件中,其实能够设置OnScrollListener来监听滑动状态。code
当你实现了这个接口,那么就须要实现两个抽象方法onScrollStateChanged和onScroll;orm
onScroll以下:blog
1 @Override 2 public void onScroll(AbsListView view, int firstVisibleItem, 3 int visibleItemCount, int totalItemCount) { 4 /** 5 * firstVisibleItem 表示在当前屏幕显示的第一个listItem在整个listView里面的位置(下标从0开始) 6 * visibleItemCount表示在现时屏幕能够见到的ListItem(部分显示的ListItem也算)总数 7 * totalItemCount表示ListView的ListItem总数 8 * listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem 9 * (最后ListItem要彻底显示出来才算)在整个ListView的位置(下标从0开始) 10 */ 11 }
onScrollStateChanged以下:索引
1 @Override 2 public void onScrollStateChanged(AbsListView view, int scrollState) { 3 /** 4 *scrollState有三种状态,分别是SCROLL_STATE_IDLE、SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING 5 *SCROLL_STATE_IDLE是当屏幕中止滚动时 6 *SCROLL_STATE_TOUCH_SCROLL是当用户在以触屏方式滚动屏幕而且手指仍然还在屏幕上时(The user is scrolling using touch, and their finger is still on the screen) 7 *SCROLL_STATE_FLING是当用户因为以前划动屏幕并抬起手指,屏幕产生惯性滑动时(The user had previously been scrolling using touch and had performed a fling) 8 */ 9 } 10 }
那么咱们其实使用onScrollStateChanged就能够触发了:
接口
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { if (view.getLastVisiblePosition() == view.getCount() - 1) {
//*******这段代码是我本身的数据进行添加**************** Map<String,Object> map1 = new HashMap<String,Object>(); map1.put("title", "abc"); map1.put("img", R.drawable.ic_launcher); list.add(map1); //************************** BaseAdapter ba = (BaseAdapter)gridview.getAdapter(); ba.notifyDataSetChanged(); } } }
上面的代码解释一下:get
一、scrollState 是滑动的状态,SCROLL_STATE_IDLE表示屏幕中止滑动的那一刻;it
二、view.getLastVisiblePosition()获取的是当前整个列表(不管你是listview仍是gridview)全部item子控件的最后一个组件,而且是从0开始索引;io
三、view.getCount()表示的是当前的组件的数量,是从1开始查的(只要你会查数就行),因此判断的时候要-1;
四、最后仍是要获取的列表对应的适配器(Adapter),而后notifyDataSetChanged刷新列表数据(好处是不须要刷新整个Activity)。
那么这样就能够实现到底自动刷新效果了。(四海小森纯手打^_^)