android分页代码

package com.example.lesson5;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class DivicepageActivity extends Activity implements OnScrollListener {
	private List<Student> list = null;
	int index = 0;
	MyAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_view);
		list = new ArrayList<Student>();
		ListView listView = (ListView) findViewById(R.id.xListView);
		initData();
		View view = getLayoutInflater().inflate(R.layout.activity_foot,null);
	    listView.addFooterView(view);
		adapter = new MyAdapter();
		adapter.setData(list);
		listView.setAdapter(adapter);
		
		//添加监听
		listView.setOnScrollListener(this);

	}
     //给List里面赋值
	public void initData(){
		for (int i = 0; i < 20; i++) {
			list.add(new Student("name"+index, "boy"+index, index++));
		}
	}
    //创建自己的Adapter,往组件里面添加数据
	private class MyAdapter extends BaseAdapter {
		private List<Student> data = new ArrayList<Student>();

		@SuppressWarnings("unused")
		public List<Student> getData() {
			return data;
		}

		public void setData(List<Student> data) {
			this.data = data;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return data.size();
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return data.get(arg0);
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return arg0;
		}

		//采用缓存机制来节省资源
		@Override
		public View getView(int arg0, View convertView, ViewGroup arg2) {
			ViewHolder holder = null;
			if (convertView == null) {
				convertView = getLayoutInflater().inflate(
						R.layout.activity_mylistview, null);
				holder = new ViewHolder();
				holder.nameText = (TextView) convertView
						.findViewById(R.id.nameText);
				holder.sexText = (TextView) convertView
						.findViewById(R.id.sexText);
				holder.ageText = (TextView) convertView
						.findViewById(R.id.ageText);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			System.out.println(data.get(arg0).toString());
			holder.nameText.setText(data.get(arg0).getName());
			holder.sexText.setText(data.get(arg0).getSex());
		    holder.ageText.setText(data.get(arg0).getAge()+"");
			return convertView;
		}

	}

	public static class ViewHolder {
		TextView nameText;
		TextView sexText;
		TextView ageText;

	}


	int currentTotal=0;
	@Override
	public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
		//滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。    
        //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)    
        //visibleItemCount:当前能看见的列表项个数(小半个也算)    
        //totalItemCount:列表项共数 
		
        //计算当前数据的条数
        currentTotal=firstVisibleItem+visibleItemCount-1;	
		
	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		// TODO Auto-generated method stub
		//正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调    
        //回调顺序如下    
        //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动    
        //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)    
        //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动             
        //当屏幕停止滚动时为0;当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1;  
        //由于用户的操作,屏幕产生惯性滑动时为2  
    
		//判断滚动条是否处于空闲状态,并且数据条数等于链表的长度
       if((scrollState==OnScrollListener.SCROLL_STATE_IDLE)
    	&&(currentTotal==list.size())){
			new MyThread().start();
		     }
	}

	public class MyThread extends Thread{
		@Override
		public void run() {
			initData();
		  try {
			Thread.sleep(5000);
			handler.sendEmptyMessage(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
	}
	//子线程与主线程通信,子线程不能改变主线程的数据,就需要一个中间类来传递信息,就是Handler类
	@SuppressLint("HandlerLeak")
	private Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 100:
				adapter.setData(list);
				adapter.notifyDataSetChanged();
				break;

			default:
				break;
			}
		};
	};
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值