博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
listvew加载更多
阅读量:6002 次
发布时间:2019-06-20

本文共 3216 字,大约阅读时间需要 10 分钟。

 

又是新的一周的开始,上午自己写了上拉加载更多数据的demo,嘿嘿这里和大家分享。

   android开发中,listview是最常用的控件之一,通常我们可以再微博、微信等很多应用里面都可以看到下拉刷新,以及上拉刷新,点击查看更多等功能。这里介绍下说下上拉刷新。
  上拉刷新其实和底部的“点击加载更多”的功能差不多。都是分页加载数据的一个实现。具体是去监听滚动条事件,下拉到底部时进行操作。
这里直接上代码

复制内容到剪贴板
代码:
package com.xzw.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity implements OnScrollListener {
        
        private static final String TAG = "MainActivity";
        
        private ListView listView;
        private View moreView; //加载更多页面
        
        private SimpleAdapter adapter;
        private ArrayList<HashMap<String, String>> listData;
        
        private int lastItem;
    private int count;
     
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        listView = (ListView)findViewById(R.id.listView);
        moreView = getLayoutInflater().inflate(R.layout.load, null);
        listData = new ArrayList<HashMap<String,String>>();
        
        prepareData(); //准备数据
        count = listData.size();
     
        adapter = new SimpleAdapter(this, listData,R.layout.item, 
                        new String[]{"itemText"}, new int[]{R.id.itemText});
        
        listView.addFooterView(moreView); //添加底部view,一定要在setAdapter之前添加,否则会报错。
        
        listView.setAdapter(adapter); //设置adapter
        listView.setOnScrollListener(this); //设置listview的滚动事件
    }
    private void prepareData(){  //准备数据
            for(int i=0;i<10;i++){
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put("itemText", "测试数据"+i);
                    listData.add(map);
            }
            
    }
    
    private void loadMoreData(){ //加载更多数据
             count = adapter.getCount(); 
            for(int i=count;i<count+5;i++){
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put("itemText", "测试数据"+i);
                    listData.add(map);
            }
            count = listData.size();
    }
        
        public void onScroll(AbsListView view, int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) {
                
                Log.i(TAG, "firstVisibleItem="+firstVisibleItem+"\nvisibleItemCount="+
                                visibleItemCount+"\ntotalItemCount"+totalItemCount);
                
                lastItem = firstVisibleItem + visibleItemCount - 1;  //减1是因为上面加了个addFooterView
                
        }
        
        public void onScrollStateChanged(AbsListView view, int scrollState) { 
                Log.i(TAG, "scrollState="+scrollState);
                //下拉到空闲是,且最后一个item的数等于数据的总数时,进行更新
                if(lastItem == count  && scrollState == this.SCROLL_STATE_IDLE){ 
                        Log.i(TAG, "拉到最底部");
                        moreView.setVisibility(view.VISIBLE);
                 
                    mHandler.sendEmptyMessage(0);
                         
                }
                
        }
        //声明Handler
        private Handler mHandler = new Handler(){
                public void handleMessage(android.os.Message msg) {
                        switch (msg.what) {
                        case 0:
                             
                                try {
                                        Thread.sleep(3000);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                            loadMoreData();  //加载更多数据,这里可以使用异步加载
                            adapter.notifyDataSetChanged();
                            moreView.setVisibility(View.GONE); 
                            
                            if(count > 30){
                                    Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show();
                                  listView.removeFooterView(moreView); //移除底部视图
                            }
                                Log.i(TAG, "加载更多数据");
                                break;
            case 1:
                                
                                break;
                        default:
                                break;
                        }
                };
        };
    
}

  以上就是核心的代码,下载:   (689.73 KB) 。
效果图:
     
    具体就是这样了,很简单吧。
    能力有限,请大家多多指教。一起交流学习。

转载地址:http://lpbmx.baihongyu.com/

你可能感兴趣的文章
web服务器工作原理及http协议通信
查看>>
数据库查询某个字段值的位数 语法
查看>>
java file 文件操作 operate file of java
查看>>
WPF获取路径解读
查看>>
【实战HTML5与CSS3】用HTML5和CSS3制作页面(上)
查看>>
Android : 如何在WebView显示的页面中查找内容
查看>>
数字信号处理 基础知识 对比回顾
查看>>
分享个人Vim型材
查看>>
配置算法(第4版)的Java编译环境
查看>>
本学习笔记TCP/IP传输协议
查看>>
配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp
查看>>
201215-03-19---cocos2dx内存管理--具体解释
查看>>
swift菜鸟入门视频教程-12-21讲
查看>>
CSharpGL(11)用C#直接编写GLSL程序
查看>>
仰视源代码,实现memcpy
查看>>
HTTP gzip和deflate的几点区别
查看>>
{Repeater控件} Repeater控件的用法流程及实例
查看>>
AD账号解锁
查看>>
English - in the light of(按照,根据)与according to的区别是什么
查看>>
浅析linux内核中的idr机制
查看>>