ListView的分页加载功能

参考资料:

首先新建一个layout文件,命名为moredata.xml,包含一个Button和一个ProgressBar,xml代码如下:
<?xml version="1.0" encoding="utf-8"?>   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
    android:layout_width="match_parent"   
    android:layout_height="match_parent"   
    android:orientation="vertical" >   
  <Button       
      android:id="@+id/bt_load"       
      android:layout_width="fill_parent"       
      android:layout_height="wrap_content"     
      android:text="加载更多数据" />    
  <ProgressBar   
      android:id="@+id/pg"   
      android:layout_width="wrap_content"   
      android:layout_height="wrap_content"   
      android:layout_gravity="center_horizontal"   
      android:visibility="gone"   
      />   
</LinearLayout>  

然后定义一个item.xml,其作用是定义ListView的每个item的视图,代码如下:
<?xml version="1.0" encoding="utf-8"?>   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
    android:layout_width="match_parent"   
    android:layout_height="match_parent"   
    android:orientation="vertical" >   
       
    <TextView   
        android:id="@+id/tv_title"   
        android:textSize="20sp"   
        android:layout_width="wrap_content"   
        android:layout_height="wrap_content"   
        android:layout_marginTop="5dp"   
        />   
    <TextView   
        android:textSize="12sp"   
        android:id="@+id/tv_content"   
        android:layout_width="wrap_content"   
        android:layout_height="wrap_content"   
        android:layout_marginTop="5dp"   
        />   
   
</LinearLayout> 

下面是主MainActivity.java代码:

package cn.llbb.testlistview2;

import android.support.v7.app.ActionBarActivity;

import java.util.*;
import android.os.Bundle;
import android.os.Handler;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.widget.AbsListView.OnScrollListener;

public class MainActivity extends ActionBarActivity implements OnScrollListener{

	private ListView list = null;
	private SimpleAdapter mSimpleAdapter;
	private Button bt; 
	private ProgressBar pg; 
	private Handler handler;
	private ArrayList<HashMap<String,String>> listitem;
	private View moreView;
	private int MaxDateNum;
	private int lastVisibleIndex;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		list = (ListView) findViewById(R.id.listView1);
		MaxDateNum = 65;
		listitem = new ArrayList<HashMap<String,String>>();
		moreView = getLayoutInflater().inflate(R.layout.moredata, null);
		bt = (Button) moreView.findViewById(R.id.bt_load);
		pg = (ProgressBar) moreView.findViewById(R.id.pg);
		handler = new Handler();

		listitem = new ArrayList<HashMap<String,String>>();
		for(int i = 0;i < 10; i++){
			HashMap<String, String> item = new HashMap<String, String>(); 
			item.put("ItemTitle", "第" + i + "行标题");
			item.put("ItemText", "第" + i + "行内容");
			listitem.add(item);
		}
		mSimpleAdapter = new SimpleAdapter(this, listitem, R.layout.item, 
                                           new String[]{"ItemTitle","ItemText"}, 
                                           new int[]{R.id.tv_title,R.id.tv_content});
		list.addFooterView(moreView);
		list.setAdapter(mSimpleAdapter);

		bt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				pg.setVisibility(View.VISIBLE);
				bt.setVisibility(View.GONE);
				handler.postDelayed(new Runnable() {   
					   
                    @Override   
                    public void run() {   
                        loadMoreDate();// 加载更多数据   
                        bt.setVisibility(View.VISIBLE);   
                        pg.setVisibility(View.GONE);   
                        mSimpleAdapter.notifyDataSetChanged();// 通知listView刷新数据   
                    }   
   
                }, 2000);  
			}
		});

	}

	 private void loadMoreDate() {   
	        int count = mSimpleAdapter.getCount();   
	        if (count + 5 < MaxDateNum) {   
	            // 每次加载5条   
	            for (int i = count; i < count + 5; i++) {   
	                HashMap<String, String> map = new HashMap<String, String>();   
	                map.put("ItemTitle", "新增第" + i + "行标题");
	                map.put("ItemText", "新增第" + i + "行内容");  
	                listitem.add(map);
	            }   
	        } else {   
	            // 数据已经不足5条   
	            for (int i = count; i < MaxDateNum; i++) {   
	                HashMap<String, String> map = new HashMap<String, String>();   
	                map.put("ItemTitle", "新增第" + i + "行标题");   
	                map.put("ItemText", "新增第" + i + "行内容");   
	                listitem.add(map);   
	            }   
	        }   
	   
	    }   
	 
	  public void onScroll(AbsListView view, int firstVisibleItem,   
	            int visibleItemCount, int totalItemCount) {   
	        lastVisibleIndex = firstVisibleItem + visibleItemCount - 1;   
	   
	        if (totalItemCount == MaxDateNum + 1) {   
	        	list.removeFooterView(moreView);   
	            Toast.makeText(this, "数据全部加载完成,没有更多数据!", Toast.LENGTH_LONG).show();   
	        }   
	   
	    }   
	   
	  

	    @Override   
	    public void onScrollStateChanged(AbsListView view, int scrollState) {   
	        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE   
	                && lastVisibleIndex == mSimpleAdapter.getCount()) {   
	        }   
	   
	    }  

}
时间: 2024-08-02 11:03:33

ListView的分页加载功能的相关文章

ListView实现分页加载(一)制作Demo

一.什么是分页加载 在下面的文章中,我们来讲解LitView分页加载的实现.什么是分页加载呢?我们先看几张效果图吧,如下:                                               效果说明:我们向上滑动ListView的时候,当滑动的最底部, 便会出现正在加载的进度条,当加载完成后,会出现加载后的数据.如此反复,这其实就是ListView的分页加载功能.像这样的工能,实在是太常见了.那么它是怎么实现的呢? 实现原理很简单,本质上,其实就是一个自定义的ListV

android UI进阶之实现listview的分页加载

 分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现. 首先,

listview实现分页加载数据的注意点

1,实现分页是服务器提供分页的功能,每次请求传递一个page参数,代表需要加载那一页数据 2,适配器中得新建一个类似如下的方法 public void appendData(List<MessageItem> list) {//必须是追加 this.list.addAll(list);//不能换成this.list=list,这样只会显示当前页,以前的数据会覆盖 notifyDataSetChanged(); } 3,adpter中提供构造函数和声明,类似如下 private List<

android的ListView的分页加载

main6.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent

OA系统信用盘新增三个极速彩版本Anroid中ListView实现分页加载

1.需要开启权限,AndroidManifest.xml文件中 OA系统信用盘新增三个极速彩版本  下载地址  QQ2952777280 <uses-permission android:name="android.permission.INTERNET"/>   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 2.activity_mai

Android ListView分页加载(服务端+android端)Demo

Android ListView分页加载功能 在实际开发中经常用到,是每个开发者必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了测试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源代码: 服务端: 需要导入图中这几个jar包. 在运行Android端代码前,需要开启服务端: 下面先给出服务端的代码: 类EmpDataSource: package com.android

带表头 固定列可左右上下滑动的可分页加载的ListView

项目描述: 最近做项目,遇到一个问题,就是要求ListView既要有表头,点击表头从能够对特定的列进行排序,并且要求固定第一列,右边的其他列不固定,能够向左滑动的时候,收缩到左侧,向右滑动的时候,显示已经收缩的列,总之就是满足一个需求,一个表里面有很多个列的时候,单个屏幕显示不完所有的列,因此,就做一个可收缩的列表,用于在一个控件里面显示完表中所有的字段. 小的我参考了网上的代码,名字为demoHListView(大家可以到网上搜索下载,或者在我共享的代码中去下载),是用观察者模式来实现的效果,

Android中listView的下拉加载功能实现

今天给大家讲讲android开发中比较常见的listView的下拉加载,其实也可以叫做分页加载.为什么会有这个叫法呢?说说我的理解吧! 从字面上很好理解.当你滑动一个列表到底部的时候,这个时候就会出现正在加载的底部加载布局去加载更多的数据.这里拿微信作为一个例子,如下图所示: 如上图所示红色方框的部分就是底部的加载布局.从一定程度上这样做是必要的,为了优化用户的体验.你可以想想,假如你点开微信的朋友圈的时候,如果没有做分页加载,那么你需要等待很久的时间才能够看到你和朋友发的一些状态.这是因为这个

ListView分页加载数据

在android软件开发中,ListView是一种经常被用到的组件.当需要用到列表显示的时候,通常都会用到.而使用的过程中也可能出现一些问题.比如,一次性加载过多的Item对于手机有限的内存来说,是一种负担.于是就有了分页加载的技术,一般的说,分页的使用方式有两种,一是在滑动到底部的时候,自动加载下一部分的内容.另一种则是在底部添加一个类似按钮的控件,点击后加载内容.这里介绍的是第一种.同样的,代码来自github,网址是:https://github.com/nicolasjafelle/Pa