zoukankan      html  css  js  c++  java
  • 如何让listview或者gridview设置到底刷新新数据

    昨天简单的看了一下ScrollView的例子,虽然可以实现拉到底触发监听,但是Listview和gridview本身就自带了下拉属性,所以不需要ScrollView来实现。

    那么在Listview和gridview中怎么把到底自动刷新数据实现呢?

    在这两个组件中,其实可以设置OnScrollListener来监听滑动状态。

    当你实现了这个接口,那么就需要实现两个抽象方法onScrollStateChanged和onScroll;

    onScroll如下:

     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(); } } }

    上面的代码解释一下:

    1、scrollState 是滑动的状态,SCROLL_STATE_IDLE表示屏幕停止滑动的那一刻;

    2、view.getLastVisiblePosition()获取的是当前整个列表(无论你是listview还是gridview)所有item子控件的最后一个组件,并且是从0开始索引;

    3、view.getCount()表示的是当前的组件的数量,是从1开始查的(只要你会查数就行),所以判断的时候要-1;

    4、最后还是要获取的列表对应的适配器(Adapter),然后notifyDataSetChanged刷新列表数据(好处是不需要刷新整个Activity)。

    那么这样就可以实现到底自动刷新效果了。(四海小森纯手打^_^)

  • 相关阅读:
    P2801 教主的魔法 (分块)
    BZOJ_1614_ [Usaco2007_Jan]_Telephone_Lines_架设电话线_(二分+最短路_Dijkstra/Spfa)
    BZOJ_1601_[Usaco2008_Oct]_灌水_(最小生成树_Kruskal)
    BZOJ_1612_[Usaco2008_Jan]_Cow_Contest_奶牛的比赛_(dfs)
    BZOJ_1833_[ZJOI2010]_数字计数_(数位dp)
    BZOJ_1026_[SCOI2009]_windy数_(数位dp)
    BZOJ_4326_[NOIP2015]_运输计划_(二分+LCA_树链剖分/Tarjan+差分)
    BZOJ_2194_快速傅立叶之二_(FFT+卷积)
    BZOJ_1615_[Usaco2008_Mar]_The Loathesome_Hay Baler_麻烦的干草打包机_(模拟+宽搜/深搜)
    BZOJ_1626_[Usaco2007_Dec]_Building_Roads_修建道路_(Kruskal)
  • 原文地址:https://www.cnblogs.com/ccshxt/p/5231624.html
Copyright © 2011-2022 走看看