如何讓listview或者gridview設置到底刷新新數據

昨天簡單的看了一下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)。

那麼這樣就能夠實現到底自動刷新效果了。(四海小森純手打^_^)

相關文章
相關標籤/搜索