recyclerview添加上拉加载显示加载状态

来源:互联网 发布:erlang python 编辑:程序博客网 时间:2024/06/06 03:12

上拉加载

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);                        }
阅读全文
0 0
原创粉丝点击