listview分页

package com.newer.page.demo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnScrollListener {

	private listViewAdapter adapter = new listViewAdapter();

	ListView listView;
	LinearLayout loadingLayout;
	private Thread mThread;

	/** * 设置布局显示属性 */
	private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.WRAP_CONTENT,
			LinearLayout.LayoutParams.WRAP_CONTENT);

	/** * 设置布局显示目标最大化属性 */
	private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.FILL_PARENT,
			LinearLayout.LayoutParams.FILL_PARENT);

	private ProgressBar progressBar;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init() {
		// TODO Auto-generated method stub
		// 线性布局
		LinearLayout layout = new LinearLayout(this);

		// 设置布局 水平方向
		layout.setOrientation(LinearLayout.HORIZONTAL);

		// 进度条
		progressBar = new ProgressBar(this);
		// 进度条显示位置
		progressBar.setPadding(0, 0, 15, 0);

		// 把进度条加入到layout中
		layout.addView(progressBar, mLayoutParams);

		// 文本内容
		TextView textView = new TextView(this);
		textView.setText("加载中...");
		textView.setGravity(Gravity.CENTER_VERTICAL);

		// 把文本加入到layout中
		layout.addView(textView, FFlayoutParams);

		// 设置layout的重力方向,即对齐方式是
		layout.setGravity(Gravity.CENTER);

		// 设置ListView的页脚layout
		loadingLayout = new LinearLayout(this);
		loadingLayout.addView(layout, mLayoutParams);

		loadingLayout.setGravity(Gravity.CENTER);

		// 得到一个ListView用来显示条目
		listView = (ListView) findViewById(R.id.tv);

		// 添加到脚页显示
		listView.addFooterView(loadingLayout);
		// 给ListView添加适配器

		listView.setAdapter(adapter);

		// 给ListView注册滚动监听
		listView.setOnScrollListener(this);
	}

	/**
	 * * 要用用于生成显示数据 *
	 * 
	 * @author huangbq *
	 */

	class listViewAdapter extends BaseAdapter {

		int count = 10;

		public int getCount() {
			return count;
		}

		public Object getItem(int pos) {
			return pos;
		}

		public long getItemId(int pos) {
			return pos;
		}

		public View getView(int pos, View v, ViewGroup p) {
			TextView view;
			if (v == null) {
				view = new TextView(MainActivity.this);
			} else {
				view = (TextView) v;
			}

			view.setText("ListItem " + 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
//滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。
 //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)
 //visibleItemCount:当前能看见的列表项个数(小半个也算)
 //totalItemCount:列表项总数
//判断是否滚到最后一行
		if (firstVisibleItem + visibleItemCount == totalItemCount) {
			//没有滚到最后一行
			// 开线程去下载网络数据
			if (mThread == null || !mThread.isAlive()) {
				mThread = new Thread() {
					@Override
					public void run() {
						try {
							// 这里放你网络数据请求的方法,我在这里用线程休眠5秒方法来处理
							Thread.sleep(5000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						Message message = new Message();
						message.what = 1;
						handler.sendMessage(message);
					}
				};
				mThread.start();
			}
		}
	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		//正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调
 //回调顺序如下
 //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动
 //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)
 //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动
 
//当滚到最后一行且停止滚动时,执行加载
 //if (isLastRow && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
 //加载元素
 

	}

	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch (msg.what) {
			case 1:
				if (adapter.count <= 41) {
					adapter.count += 10;
					int currentPage = adapter.count / 10;
					Toast.makeText(getApplicationContext(),
							"第" + currentPage + "页", Toast.LENGTH_LONG).show();
				} else {
					listView.removeFooterView(loadingLayout);
				}
				// 重新刷新Listview的adapter里面数据
				adapter.notifyDataSetChanged();
				break;
			default:
				break;
			}
		}
	};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值