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)。

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

  • 相关阅读:
    out/host/linuxx86/obj/EXECUTABLES/aapt_intermediates/aapt 64 32 操作系统
    linux 查看路由器 电脑主机 端口号 占用
    linux proc进程 pid stat statm status id 目录 解析 内存使用
    linux vim 设置大全详解
    ubuntu subclipse svn no libsvnjavahl1 in java.library.path no svnjavahl1 in java.library.path no s
    win7 安装 ubuntu 双系统 详解 easybcd 工具 不能进入 ubuntu 界面
    Atitit.json xml 序列化循环引用解决方案json
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.跨语言  文件夹与文件的io操作集合  草案
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/ccshxt/p/5231624.html
Copyright © 2011-2022 走看看