1.新建一个底部布局
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/load_layout"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal" >
<ProgressBar
android:id="@+id/pb"
style="?android:attr/progressBarStyleSmall"
android:layout_width="40dp"
android:layout_marginLeft="20dp"
android:gravity="center"
android:layout_height="60dp" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:gravity="center"
android:text="正在加载..." />
</LinearLayout>
2.创建自已的ListView,提供三个构造方法(在XML加载布局时,系统调用)
3.在initView()方法里,把底部布局添加到自定义的ListView
4.在构造方法里调用initView()
public MyListView(Context context) {
super(context);
initView(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context);
}
/**
* 添加底部提示布局到ListView
* @param context
*/
private void initView(Context context){
LayoutInflater inflater = LayoutInflater.from(context);
footer_view = inflater.inflate(R.layout.footer, null);
load_layout = (LinearLayout) footer_view.findViewById(R.id.load_layout);
load_layout.setVisibility(View.GONE);
this.addFooterView(footer_view);
this.setOnScrollListener(this);
}
5.实现OnScrollListener 接口,重写里面的 public void onScrollStateChanged(AbsListView view, int scrollState)和
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) 方法里,把底部布局添加到自定义的ListView
onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount)
firstVisibleItem 第一个可见的Item visibleItemCount 可以看见的Item总数 totalItemCount Item的总数
6.用回调方法来添加数据,提供一个获取回调对象的方法,在onScrollStateChanged()中调用方法
private LinearLayout load_layout;
private View footer_view;
private int totalCount;
private int lastCount; //最后一个可见的Item
private boolean isLoading; // 是否正在滑动
private LoadCallback mCallback;
7.在Activity 中实现回调接口和它的方法
添加更多的数据 在ListView中显示出来
8.模拟加载过程,调用Handler.postDelay()方法
9.加载完成,让底部布局消失
public class MainActivity extends Activity implements LoadCallback{
private MyListView lv;
private ArrayAdapter<String> adapter;
private ArrayList<String> dataList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showListView(dataList);
}
Handler mHandler = new Handler();
@Override
public void LoadData() {
// TODO Auto-generated method stub
System.out.println("添加更多数据");
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
addData();
showListView(dataList);
//通知listview加载完成
lv.LoadCompletion();
}
}, 2000);
}
private void showListView(ArrayList list) {
// TODO Auto-generated method stub
if(adapter == null){
lv = (MyListView) findViewById(R.id.lv);
lv.setListener(this);
for(int i = 0; i < 20;i++){
dataList.add("data"+i);
}
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
lv.setAdapter(adapter);
}else{
dataList = list;
adapter.notifyDataSetChanged();
}
}
public void addData(){
for(int i = 0; i < 2; i++){
dataList.add("更多数据:"+(i+1));
}
}
}