上一篇我粗略的说了下实现ListView下拉刷新的主要步骤,接下来我就如何实现ListView的分页加载来说下主要实现步骤:
1.继承ListView,ListView有一个addFooterView的方法用来在ListView的底部添加一个view。
2.同样给ListView添加滚动监听事件。
3.通过OnScrollListener中的onScroll方法来判断ListView是否滑到了最底部。
4.同样通过回调接口来实现在Activity中加载数据。
5.通过OnScrollListener中的onScrollStateChanged方法来改变底部view的显示以及加载更多数据。
下面看代码:
public class ListViewFooterRefresh extends ListView implements OnScrollListener{
private View footerView;
private int firstVisibleItem;//第一个Item的位置
private int visibleItemCount;//显示的Item数量
private int totalItemCount;//显示的最后一个Item
private int lastVisibleItem;
private boolean isLoading;//是否正在加载
private RefreshListener refreshListener;
public ListViewFooterRefresh(Context context) {
super(context);
initView(context);
}
public ListViewFooterRefresh(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public ListViewFooterRefresh(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
/**
* 加载底部布局
* @param context
*/
private void initView(Context context){
footerView = LayoutInflater.from(context).inflate(R.layout.footer_listview, null);
footerView.findViewById(R.id.footer).setVisibility(View.GONE);
this.addFooterView(footerView);
this.setOnScrollListener(this);
}
/**
* 滚动事件
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(lastVisibleItem == totalItemCount && scrollState == SCROLL_STATE_IDLE){
if(!isLoading){
isLoading = true;
//显示footer
footerView.findViewById(R.id.footer).setVisibility(VISIBLE);
//加载更多,刷新数据
refreshListener.OnRefresh();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
this.lastVisibleItem = firstVisibleItem + visibleItemCount;
this.totalItemCount = totalItemCount;
}
/**
* 设置回调接口
* @param refreshListener
*/
public void setInterface(RefreshListener refreshListener){
this.refreshListener = refreshListener;
}
/**
* 回调接口
* @author 5027
*
*/
public interface RefreshListener{
public void OnRefresh();
}
/**
* 加载完成
*/
public void refreshComplete(){
footerView.findViewById(R.id.footer).setVisibility(View.GONE);
}
}
//////////////////////////////////////////////////////Activity/////////////////////////////////////////////////////////////
@Override
public void OnRefresh() {
Handler handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
//重新加载更多数据
ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,new String[]{"小亮"});
listViewFooterRefresh.setAdapter(adapter);
//通知ListView刷新完毕
listViewFooterRefresh.refreshComplete();
}
}, 2000);
}