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

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

  • 相关阅读:
    unexpected inconsistency;run fsck manually esxi断电后虚拟机启动故障
    centos 安装mysql 5.7
    centos 7 卸载mysql
    centos7 在线安装mysql5.6,客户端远程连接mysql
    ubuntu 14.04配置ip和dns
    centos7 上搭建mqtt服务
    windows eclipse IDE打开当前类所在文件路径
    git 在非空文件夹clone新项目
    eclipse中java build path下 allow output folders for source folders 无法勾选,该如何解决 eclipse中java build path下 allow output folders for source folders 无法勾选,
    Eclipse Kepler中配置JadClipse
  • 原文地址:https://www.cnblogs.com/ccshxt/p/5231624.html
Copyright © 2011-2022 走看看