recyclerview添加上拉加载显示加载状态
2017-06-05 17:50
363 查看
上拉加载
显示加载状态
USE :
before get data:
after get data:
rvExam.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager(); int totalItemCount = recyclerView.getAdapter().getItemCount(); int lastVisibleItemPosition = lm.findLastVisibleItemPosition(); int visibleItemCount = recyclerView.getChildCount(); if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItemPosition == totalItemCount - 1 && visibleItemCount > 0 && page < mPageCount) { //加载更多 presenter.getCoursePackageDetailExamEntity(ordDetailId, ++page, 10, examAdapter); } } });
显示加载状态
public class CoursePackageDetailExamAdapter2 extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static Activity act; private List<T> examList = new ArrayList<>(); private LayoutInflater mLayoutInflater; public static final int VIEW_TYPE_NORMAL = 0; public static final int VIEW_TYPE_FOOTER = -1; public static final int STATE_HIDE = 1; public static final int STATE_LOADING = 2; public static final int STATE_NO_MORE = 3; private static int mState; private int mPageCount; public CoursePackageDetailExamAdapter2(Activity act, List<T> list) { this.act = act; examList = list; mLayoutInflater = LayoutInflater.from(act); mState = STATE_HIDE; } public void updateAdapter(List<T> newList, int pageCount) { mPageCount = pageCount; examList.addAll(newList); notifyDataSetChanged(); } @Override public int getItemViewType(int position) {//根据数据有几页来判断如果只有一页数据则不显示footer if (mPageCount == 1) { return VIEW_TYPE_NORMAL; } else { if (position + 1 == getItemCount()) { return VIEW_TYPE_FOOTER; } else { return VIEW_TYPE_NORMAL; } } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_FOOTER) { return new FooterViewHolder(mLayoutInflater.inflate(R.layout.footer_postlist, parent, false)); } else { return new MyViewHolder(mLayoutInflater.inflate(R.layout.item_course_package_exam_rv, parent, false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof FooterViewHolder) { ((FooterViewHolder) holder).itemView.setVisibility(View.VISIBLE); ((FooterViewHolder) holder).bindData(((FooterViewHolder) holder).itemView); } else { ((MyViewHolder) holder).bindData(examList, position); } } @Override public int getItemCount() {//如果只有一页数据不显示footer if (mPageCount == 1) { return examList == null ? 0 : examList.size(); } else { return examList == null ? 0 : examList.size() + 1; } } public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public MyViewHolder(View itemView) { super(itemView); initView(itemView); } private void initView(View itemView) { } public void bindData(List<T> examList, int position) { } public static class FooterViewHolder extends RecyclerView.ViewHolder { private ProgressBar pbBar; private TextView tvNote; public FooterViewHolder(View itemView) { super(itemView); initView(itemView); } private void initView(View itemView) { pbBar = (ProgressBar) itemView.findViewById(R.id.footer_postlist_pbar); tvNote = (TextView) itemView.findViewById(R.id.footer_postlist_tv_note); } public void bindData(View itemView) { switch (mState) { case STATE_LOADING: tvNote.setText("加载中"); pbBar.setVisibility(View.VISIBLE); break; case STATE_NO_MORE: tvNote.setText("已到底部,没有更多模考了"); pbBar.setVisibility(View.GONE); break; case STATE_HIDE: itemView.setVisibility(View.GONE); break; } } } public void setState(int state) { if (this.mState != state) { this.mState = state; updateItem(getItemCount() - 1); } } private void updateItem(int position) { if (getItemCount() > position) { notifyItemChanged(position); } }
<?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"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="horizontal"> <ProgressBar android:id="@+id/footer_postlist_pbar" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:layout_marginRight="10dp"/> <TextView android:id="@+id/footer_postlist_tv_note" android:layout_width="wrap_content" android:layout_height="70dp" android:gravity="center" android:text="加载中..."/> </LinearLayout> </RelativeLayout>
USE :
before get data:
examAdapter.setState(STATE_LOADING);
after get data:
if (pageCurrentNo == pageCount) { examAdapter.setState(STATE_NO_MORE); } else { examAdapter.setState(STATE_HIDE); }
相关文章推荐
- 基于RecyclerView-添加上啦加载(AndroidStudio)
- 上拉加载下拉刷新的RecyclerView可添加headerView
- Android添加图片到ListView或者RecyclerView显示
- RecyclerView的加载显示多种布局
- RecyclerView的使用以及下拉刷新自动加载(添加点击事件、头部)
- Android RecyclerView瀑布流布局添加Footer实现上拉加载
- MVP+RXJAVA+RecyclerView实现sd卡根目录下的所有文件中的照片加载并显示
- 用RecyclerView实现新闻列表页,包括头部的图片轮播,两种Item显示方式,下拉刷新和上拉加载以及限制列表的加载条目数
- 基于RecyclerView的封装,仿qq侧拉删除效果,实现下拉刷新,上拉加载更多,添加header,添加footer
- RecyclerView的加载显示多种布局
- SwipeRefreshLayout配合RecyclerView实现下拉刷新和上拉加载更多以及没有数据的显示
- SwipeRefreshLayout配合RecyclerView实现下拉刷新和上拉加载更多以及没有数据的显示
- XRecyclerView:实现下拉刷新、滚动到底部加载更多以及添加header功能的RecyclerView
- RecyclerView加载不同item并实现其item点击事件,实现添加常用应用的功能
- RecyclerView 动画 (添加、删除动画 以及 加载item 时的动画)
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
- webview 状态加载开始时显示进度条
- EasyRecyclerView 添加header,footer, 上拉加载更多的recyclerview
- 自定义RecyclerView添加HeaderView,添加FooterView,实现滑动到底部,加载更多
- RecyclerView使用详解一代替ListView(点击事件,添加头布局,上拉刷新下拉加载)