您的位置:首页 > 其它

ListView分页功能(1)

2016-07-15 19:14 337 查看
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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息