写项目的时候经常用的这个listview自动加载,一般都是在网上找的,今天突发奇想想自己写一个,本来以为很高深,没想到挺简单的,
简单说明一下,
1.写一个footer,listview有一个addFooterView(),用这个方法把footer添加进去,当然footer要隐藏起来,不然你就会发现刚打开页面就有一个footer在那边
2.实现listview的滚动事件OnScrollListener;
直接上代码:
import android.content.Context;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
/**
* 自动加载的listview
* @author 董殷
*
*/
public class AutoLoadListView extends ListView implements OnScrollListener {
private Context context;
private View footer;
private RelativeLayout footer_listview_rel;
private OnLoadListener onLoadListener;
int lastVisibleItem;//最后一个item的序号
int totalItemCount;//总itme数量
boolean isLoading;//判断是否加载数据
public AutoLoadListView(Context context) {
super(context);
this.context = context;
init();
}
public AutoLoadListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
public AutoLoadListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
private void init() {
LayoutInflater inflater = LayoutInflater.from(context);
footer = inflater.inflate(R.layout.footer_listview, null);
footer_listview_rel = (RelativeLayout) footer
.findViewById(R.id.footer_listview_rel);
TextPaint tp = footer_listview_tv.getPaint();
tp.setFakeBoldText(true);
footer_listview_rel.setVisibility(View.GONE);
this.addFooterView(footer);
this.setOnScrollListener(this);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
lastVisibleItem = firstVisibleItem + visibleItemCount;
this.totalItemCount = totalItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (totalItemCount == lastVisibleItem && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
if(!isLoading){
isLoading = true;
onLoad();
footer_listview_rel.setVisibility(View.VISIBLE);
}
}
}
public void onLoad() {
if (onLoadListener != null) {
onLoadListener.onLoad();
}
}
// 加载更多监听
public void setOnLoadListener(OnLoadListener onLoadListener) {
this.onLoadListener = onLoadListener;
}
/*
* 定义加载更多接口
*/
public interface OnLoadListener {
public void onLoad();
}
public void setView(int num) {
if(num<20){
isLoading = true;
// footer_listview_tv.setText("没有更多数据");
}else{
isLoading = false;
footer_listview_rel.setVisibility(View.VISIBLE);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:id="@+id/footer_listview_rel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingTop="10dp" >
<ProgressBar
android:id="@+id/footer_listview_pb"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dip"
android:layout_marginRight="20dip"
android:layout_marginTop="10dip"
android:indeterminate="true" />
<TextView
android:id="@+id/footer_listview_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="加载中..." />
</RelativeLayout>
</RelativeLayout>