布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <ListView        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:id="@+id/listView" /></RelativeLayout>

单项布局文件listview_item.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" >    <TextView     android:layout_width="match_parent"    android:layout_height="match_parent"    android:textSize="18sp"    android:id="@+id/textView"    /></LinearLayout>

页脚footer.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="horizontal" >    <ProgressBar android:id="@+id/c81_forthBar"        android:layout_width="50dp"    android:layout_height="wrap_content"         style="?android:attr/progressBarStyle" />     <TextView android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center_vertical"    android:textSize="20sp"    android:text="@string/loading"    /></LinearLayout>

主类

package cn.android.datapage;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ArrayAdapter;import android.widget.ListView;import cn.android.service.DataService;public class MainActivity extends Activity {private ListView listView;private List<String> data = new ArrayList<String>();//每次获取多少条数据private int number = 20;//总共有几页private int maxpage = 5;//判断是否加载完成private boolean loadfinish = true;private ArrayAdapter<String> adapter;private View footer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //取得页脚        footer = getLayoutInflater().inflate(R.layout.footer, null);                listView = (ListView) findViewById(R.id.listView);        //监听滚动事件        listView.setOnScrollListener(new ScrollListener());        //取得数据        data.addAll(DataService.getData());        //绑定数据        adapter = new ArrayAdapter<String>(this, R.layout.listview_item, R.id.textView, data);        listView.addFooterView(footer);        listView.setAdapter(adapter);        listView.removeFooterView(footer);    }        private final class ScrollListener implements OnScrollListener {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stub}//正在滚动时调用@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {int lastItemId = listView.getLastVisiblePosition();//判断数据是否达到最后一条记录if ((lastItemId + 1) == totalItemCount) {if (totalItemCount > 0) {//当前页int currentpage = totalItemCount % number == 0 ? totalItemCount/number : totalItemCount/number + 1;int nextpage = currentpage + 1;if (nextpage < maxpage && loadfinish) {loadfinish = false;//添加页脚listView.addFooterView(footer);//线程异步加载数据new Thread(new Runnable() {@Overridepublic void run() {try {//创造网络延迟Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}List<String> result = DataService.getData();//发送数据handler.sendMessage(handler.obtainMessage(100, result));}}).start();}}}}    }    //通过handler对象来从子线程中获取数据    Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {//得到数据data.addAll((List<String>) msg.obj);//告诉listview更新数据了,要求显示adapter.notifyDataSetChanged();//删除页脚if (listView.getFooterViewsCount() > 0)listView.removeFooterView(footer);loadfinish = true;}    };    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    }

取数据的类

package cn.android.service;import java.util.ArrayList;import java.util.List;/** * 提供数据 * @author Administrator * */public class DataService {public static List<String> getData() {List<String> data = new ArrayList<String>();for (int i = 0; i < 22; i++) {data.add("我就是数据"+i);}return data;}}


更多相关文章

  1. Android参数设置父布局集体宽高
  2. Android本地数据搜索实现
  3. Android 四大组件,五大存储,六大布局
  4. Android studio连接Bmob云数据库教程
  5. android 布局随笔----用户登录界面
  6. Android之多线程断点下载
  7. Android清除本地数据缓存代码案例
  8. android通过httpClient请求获取JSON数据并且解析

随机推荐

  1. Android四大布局之表格布局行列位置控制
  2. android 5大数据存储
  3. 【起航计划 006】2015 起航计划 Android
  4. Android的属性Property系统
  5. android ndk 开发之 在 框架层使用 jni
  6. Android Animation 详解
  7. Content Provider初谈和Android联系人信
  8. android 拉伸图片
  9. Android存储设备(U盘,SD卡)状态监测(《An
  10. Android中各种Adapter的使用方法