效果图:刷新两三次之后就看到“没有更多数据”了(^__^) 耐心点等gif播放哦。
demo下载:
自定义listview加载更多 - 下载频道 - CSDN.NET
http://download.csdn.net/detail/baidu_31093133/9824346
代码:
/*** Created by REd on 2017/2/25.* 上拉加载更多的listView*/public class LoadMoreListview extends ListView implements AbsListView.OnScrollListener {/*** 底部显示正在加载的页面*/private View footerView = null;private ProgressBar footPro;private TextView footText;/*** 存储上下文*/private Context context;/*** 上拉刷新的ListView的回调监听*/private ScripRefreshListviewCallBack scripRefreshListviewCallBack;/*** 记录第一行Item的数值*/private int firstVisibleItem;public LoadMoreListview(Context context) {super(context);this.context = context;initListView();}public LoadMoreListview(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;initListView();}/*** 初始化ListView*/private void initListView() {// 为ListView设置滑动监听setOnScrollListener(this);// 去掉底部分割线setFooterDividersEnabled(false);}/*** 初始化话底部页面*/public void initBottomView(int resId) {if (footerView == null) {footerView = LayoutInflater.from(this.context).inflate(resId, null);}footPro = (ProgressBar) footerView.findViewById(R.id.foot_pro);footText = (TextView) footerView.findViewById(R.id.foot_tv);footPro.setVisibility(VISIBLE);footText.setVisibility(VISIBLE);addFooterView(footerView);}public void updateFootView() {footPro.setVisibility(GONE);footText.setText("没有更多数据了");}public void onScrollStateChanged(AbsListView view, int scrollState) {//当滑动到底部时if (scrollState == OnScrollListener.SCROLL_STATE_IDLE&& firstVisibleItem != 0) {scripRefreshListviewCallBack.scrollBottomState();}}public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {this.firstVisibleItem = firstVisibleItem;if (footerView != null) {//判断可视Item是否能在当前页面完全显示if (visibleItemCount == totalItemCount) {// removeFooterView(footerView);footerView.setVisibility(View.GONE);//隐藏底部布局} else {// addFooterView(footerView);footerView.setVisibility(View.VISIBLE);//显示底部布局}}}public void setScripRefreshListviewCallBack(ScripRefreshListviewCallBack myPullUpListViewCallBack) {this.scripRefreshListviewCallBack = myPullUpListViewCallBack;}/*** 上拉刷新的ListView的回调监听** @author xiejinxiong*/public interface ScripRefreshListviewCallBack {void scrollBottomState();}}
使用:
//传入自定义的加载数据的底布局
listview1.initBottomView(R.layout.foot_view);
//实现加载更多的回调listview1.setScripRefreshListviewCallBack(new LoadMoreListview.ScripRefreshListviewCallBack() {@Overridepublic void scrollBottomState() {//一旦滑到底部就会触发加载更多Log.i("LHD", "scrollBottomState");if (beans.size() < 30) {loadData();} else {//如果没有更多数据就调用updateFootView显示"没有更多数据"listview1.updateFootView();}}});