- package rw.listview;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.widget.AbsListView.OnScrollListener;
- public class listviewActivity extends Activity implements OnScrollListener {
- private listViewAdapter adapter ;
- ListView listView;
- private Thread mThread;
- private LayoutInflater layoutInflater;
- private View footerView;
- List<String> olist = new ArrayList<String>();
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- private void init() {
- //LayoutInflater是用来找layout下xml布局文件,并且实例化!
- layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- footerView = layoutInflater.inflate(R.layout.list, null);
- // 得到一个ListView用来显示条目
- listView = (ListView) findViewById(R.id.tv);
- // 添加到脚页显示,当光标到最下面的是的时候,出发这个方法
- listView.addFooterView(footerView);
- olist.add("000000");
- olist.add("111111");
- olist.add("222222");
- olist.add("333333");
- olist.add("444444");
- olist.add("555555");
- olist.add("666666");
- olist.add("777777");
- olist.add("888888");
- olist.add("999999");
- olist.add("-------------------");
- adapter = new listViewAdapter(this, 0, olist);
- // 给ListView添加适配器
- listView.setAdapter(adapter);
- // 给ListView注册滚动监听
- listView.setOnScrollListener(this);
- }
- /**
- * 生成显示数据
- */
- class listViewAdapter extends ArrayAdapter<String> {
- private List<String> myList;
- int count = 10;
- public String getItem(int pos) {
- return myList.get(pos);
- }
- public listViewAdapter(Context context, int textViewResourceId, List<String> objects) {
- super(context, textViewResourceId, objects);
- this.myList = objects;
- }
- public View getView(int pos, View v, ViewGroup p) {
- TextView view;
- if (v == null) {
- view = new TextView(listviewActivity.this);
- } else {
- view = (TextView) v;
- }
- view.setText("ListItem" + getItem(pos));
- view.setTextSize(20f);
- view.setGravity(Gravity.CENTER);
- view.setHeight(60);
- return view;
- }
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- // TODO Auto-generated method stub
- //当前页面可以看见的第一个ListItem+当前所有看见的ListItem=适配器上总共的ListItem,说明Scroll到最下面了
- if(firstVisibleItem+visibleItemCount==totalItemCount)
- {
- //开线程去下载网络数据
- if (mThread == null || !mThread.isAlive()) {
- mThread = new Thread() {
- @Override
- public void run() {
- try {
- if (adapter.count <= 49) {
- //这里放你网络数据请求的方法,我在这里用线程休眠5秒方法来处理
- olist.add("1 &" + adapter.count);
- olist.add("2 &" + adapter.count);
- olist.add("3 &" + adapter.count);
- olist.add("4 &" + adapter.count);
- olist.add("5 &" + adapter.count);
- olist.add("6 &" + adapter.count);
- olist.add("7 &" + adapter.count);
- olist.add("8 &" + adapter.count);
- olist.add("9 &" + adapter.count);
- olist.add("------------------->");
- }
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- //用handler 传递线程
- Message message = new Message();
- message.what = 1;
- handler.sendMessage(message);
- }
- };
- mThread.start();
- }
- }
- }
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- // TODO Auto-generated method stub
- }
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- // TODO Auto-generated method stub
- switch (msg.what) {
- case 1:
- if (adapter.count <= 49) {
- adapter.count += 10;
- int currentPage = adapter.count / 10;
- Toast.makeText(getApplicationContext(),"第" + currentPage + "页", Toast.LENGTH_LONG).show();
- } else {
- listView.removeFooterView(footerView);
- Toast.makeText(getApplicationContext(),"木有数据了!", Toast.LENGTH_LONG).show();
- }
- //重新刷新Listview的adapter里面数据
- adapter.notifyDataSetChanged();
- break;
- default:
- break;
- }
- }
- };
- // private List<Map<String, Object>> list=
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <ListView android:id="@+id/tv"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- </LinearLayout>
文件list.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <LinearLayout android:id="@+id/linearLayout1"
- android:layout_gravity="top|center_horizontal"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_weight="1"
- android:baselineAligned="true">
- <ProgressBar android:layout_height="wrap_content"
- android:id="@+id/progressBar1"
- android:layout_width="wrap_content" />
- <TextView android:text="加载中.."
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center_vertical"
- android:id="@+id/textView1" />
- </LinearLayout>
- </LinearLayout>
- 原文地址:http://blog.csdn.net/rwyz1314/article/details/6734412