ListView分页功能,使用自定义View继承ListView
添加一个footerView用来提示加载数据状态
\
\
自定义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);
}
}
\
\
\
\
\
\
\