布局文件

<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(安卓)tips2
  2. Android知识体系
  3. Android(安卓)数据和文件存储
  4. Android(安卓)数据和文件存储
  5. Android本地数据搜索实现
  6. Android(安卓)计时器 分:秒:毫秒 http://download.csdn.net/detail
  7. android 简单的上拉加载实现
  8. Android下ContentProvider 学习总结
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. 简述MVC框架模式以及在你(Android)项目中的
  2. 安卓系统架构多年经验总结:《Android程序
  3. Android必备电源管理软件
  4. Googorola对中国市场的影响
  5. 这款 iOS 付费软件,终于在安卓免费上架了
  6. Android选择弹窗(自定义可扩展)
  7. android无法找到连接的设备 ADB占用解决
  8. Android小项目——社交类app(低仿微信)
  9. Android(安卓)& Linux的suspent和resume
  10. Android的近场通信---NFC概要