ListView分页功能(1)

237 阅读1分钟

ListView分页功能,使用自定义View继承ListView 

  添加一个footerView用来提示加载数据状态

ListView分页功能,

\

\

自定义ListView:

主要是在initView() 中添加FooterView

this.addFooterView(footLayout);

/**
	 * 初始化View
	 * @param context
	 */
	private void initView(Context context) {
		LayoutInflater inflater = LayoutInflater.from(context);
		footLayout = (LinearLayout) inflater.inflate(R.layout.footer, null);
		this.addFooterView(footLayout);
		footLayout.setVisibility(View.VISIBLE);
	}

\

public class MyListView extends ListView {
	private LinearLayout footLayout;
	public MyListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initView(context);
	}

	
	public MyListView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
		// TODO Auto-generated constructor stub
	}

	public MyListView(Context context) {
		this(context, null);
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * 初始化View
	 * @param context
	 */
	private void initView(Context context) {
		LayoutInflater inflater = LayoutInflater.from(context);
		footLayout = (LinearLayout) inflater.inflate(R.layout.footer, null);
		this.addFooterView(footLayout);
		footLayout.setVisibility(View.VISIBLE);
	}

	 

}


MainActivity.java

package com.example.listviewpagedemo;

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.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;

public class MainActivity extends Activity {
	/*
	 * 底部刷新加载布局
	 */
	LinearLayout footLayout ;

	ListView lv;

	ArrayAdapter<String> adapter;

	List<String>  datas = new ArrayList<String>();;
	boolean isLoadOver = false;

	boolean isBottom = false;

	private int index = 0;


	/**
	 * 加载完了完数据通知根性
	 */
	Handler handler = new  Handler() {
		public void handleMessage(Message msg) {
			if(msg.what != 1){
				return;
			}
			try {
				if(adapter == null){
					adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,datas);
					lv.setAdapter(adapter);
					initEvent();
				}
				adapter.notifyDataSetChanged();
				lv.setSelection(index);
			} catch (Exception e) {
				e.printStackTrace();
			}	

		}; 
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);

		initView();
		initDatas();
	}
	/**
	 * 初始化ListView的事件
	 */
	private void initEvent() {
		lv.setOnScrollListener(new OnScrollListener() {

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				// TODO Auto-generated method stub
				if(isBottom && scrollState >= SCROLL_STATE_IDLE){
					isLoadOver = false;//再次加载数据
					initDatas();
				}
			}
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				if(firstVisibleItem + visibleItemCount == totalItemCount){
					index = firstVisibleItem + visibleItemCount ;
					isBottom = true;
				}else {
					isBottom = false;
				}
			}
		});
	}
	/**
	 * 初始化数据
	 */
	private void initDatas() {
		try {
			if(!isLoadOver){
				new Thread(new Runnable(){
					@Override
					public void run() {
						try {
							Thread.sleep(2000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

						//加载数据
						for (int i = 0; i < 10; i++) {
							datas.add("项目展示" + datas.size());
						}
						isLoadOver = true;
						handler.sendEmptyMessage(1);
					}
				}).start();
			} 
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

	/**
	 * 初始化view
	 */
	private void initView() {
		lv = (ListView)findViewById(R.id.listView1);
	}


}


\

\

\

\

\

\

\