package com.qiwenge.android.ui;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.qiwenge.android.R;
public class PageableListView extends ListView {
private boolean isLoading = false;
private boolean mLastItemVisible = false;
private ScrollPageListener pageListener;
private View pagerFooter;
/**
* 是否允许分页
*/
private boolean enablePage = true;
public PageableListView(Context context) {
super(context);
init();
}
public PageableListView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void setIsLoading(boolean b) {
this.isLoading = b;
}
public boolean isLoading() {
return isLoading;
}
/**
* 加载结束
*/
public void loadStart() {
setIsLoading(true);
}
/**
* 加载完成
*/
public void loadFinished() {
setIsLoading(false);
}
public void setOnScrollPageListener(ScrollPageListener listener) {
pageListener = listener;
}
public View createPagerFooterView(Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.layout_pager_footer,
null);
return view;
}
@Override
public void setAdapter(ListAdapter adapter) {
super.setAdapter(adapter);
}
/**
* 重置
*/
public void reset() {
enablePage = true;
removePageFooterView();
}
public void setPageEnable(boolean b) {
this.enablePage = b;
}
/**
* 添加分页footer
*/
public void addPageFooterView() {
if (pagerFooter == null) {
pagerFooter = createPagerFooterView(getContext());
addFooterView(pagerFooter);
}
}
/**
* 移除分页footer
*/
public void removePageFooterView() {
if (pagerFooter != null) {
removeFooterView(pagerFooter);
pagerFooter = null;
}
}
/**
* 初始化。
*/
public void init() {
this.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (!isLoading && mLastItemVisible
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
if (pageListener != null && enablePage) {
pageListener.onPage();
addPageFooterView();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
if (!isLoading && (totalItemCount > 0)
&& (firstVisibleItem + visibleItemCount >= totalItemCount - 1))
mLastItemVisible = true;
else
mLastItemVisible = false;
}
});
}
/**
* 分页监听器。
* <p/>
* Created by John on 2014-7-18
*/
public interface ScrollPageListener {
public void onPage();
}
}