LoadMoreListView
2016-05-10 12:22
176 查看
public class LoadMoreListView extends ListView implements OnScrollListener { private OnScrollListener mOnScrollListener; private LayoutInflater mInflater; // footer view private RelativeLayout mFooterView; private TextView mLabLoadMore; private CircularProgressBar mProgressBarLoadMore; // Listener to process load more items when user reaches the end of the list private OnLoadMoreListener mOnLoadMoreListener; // To know if the list is loading more items private boolean mIsLoadingMore = false; private boolean mCanLoadMore = true; private int mCurrentScrollState; public LoadMoreListView(Context context) { super(context); init(context); } public LoadMoreListView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public LoadMoreListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(Context context) { mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // footer mFooterView = (RelativeLayout) mInflater.inflate(R.layout.common_load_more_footer, this, false); mLabLoadMore = (TextView) mFooterView.findViewById(R.id.common_load_more_footer_msg); mProgressBarLoadMore = (CircularProgressBar) mFooterView.findViewById(R.id.common_load_more_footer_progress); addFooterView(mFooterView); super.setOnScrollListener(this); } @Override public void setAdapter(ListAdapter adapter) { super.setAdapter(adapter); } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (mOnScrollListener != null) { mOnScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } if (mOnLoadMoreListener != null) { if (visibleItemCount == totalItemCount) { mProgressBarLoadMore.setVisibility(View.GONE); mLabLoadMore.setVisibility(View.GONE); return; } boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount; if (!mIsLoadingMore && loadMore && mCurrentScrollState != SCROLL_STATE_IDLE) { if (!mCanLoadMore) { mLabLoadMore.setVisibility(View.VISIBLE); return; } mProgressBarLoadMore.setVisibility(View.VISIBLE); mLabLoadMore.setVisibility(View.GONE); mIsLoadingMore = true; onLoadMore(); } } } public void onScrollStateChanged(AbsListView view, int scrollState) { mCurrentScrollState = scrollState; if (mOnScrollListener != null) { mOnScrollListener.onScrollStateChanged(view, scrollState); } } /** * Set the listener that will receive notifications every time the list * scrolls. * * @param listener The scroll listener. */ @Override public void setOnScrollListener(OnScrollListener listener) { mOnScrollListener = listener; } /** * Register a callback to be invoked when this list reaches the end (last * item be visible) * * @param onLoadMoreListener The callback to run. */ public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) { mOnLoadMoreListener = onLoadMoreListener; } public void setCanLoadMore(boolean canLoadMore) { mCanLoadMore = canLoadMore; mLabLoadMore.setVisibility(View.GONE); } public void onLoadMore() { if (mOnLoadMoreListener != null) { mOnLoadMoreListener.onLoadMore(); } } /** * Notify the loading more operation has finished */ public void onLoadMoreComplete() { mIsLoadingMore = false; mProgressBarLoadMore.setVisibility(View.GONE); } /** * Interface definition for a callback to be invoked when list reaches the * last item (the user load more items in the list) */ public interface OnLoadMoreListener { /** * Called when the list reaches the last item (the last item is visible * to the user) */ public void onLoadMore(); } }
相关文章推荐
- 解决datagrid的checkbox选中事件和行选中事件,同时去除高亮
- CNN卷积神经网络(一)
- php const static define 基本用法和区别
- Redis默认配置文件redis.conf详解
- 个人tn笔记:maven 引包
- 第五次作业(文件处理)
- android studio 文件颜色所表示的意义
- EL表达式截取字符串
- poj之旅——1328
- IOS微信中点击事件会闪的问题-tap click区别
- Android逆向so文件,调试加解读
- 折半插入排序的代码实现与思考
- android游戏开发5-10 补间动画 透明度渐变 旋转 缩放 平移
- Func 委托
- Linux 文件系统类型介绍
- 转:简单的Mysql主从复制设置
- [随想感悟] 《归去来兮辞·并序》 赏析
- 函数指针和回调函数
- 小伙,你也是一名架构师
- 在windows和linux下分别部署Solr服务