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
- recyclerview添加上拉加载显示加载状态
- 给RecyclerView添加上拉加载更多
- RecyclerView上拉加载
- RecyclerView 上拉加载 PullToRefreshRecyclerView
- RecyclerView 上拉加载更多
- android RecyclerView上拉加载
- RecyclerView上拉加载Demo
- RecyclerView的上拉加载
- 上拉加载下拉刷新的RecyclerView可添加headerView
- EasyRecyclerView 添加header,footer, 上拉加载更多的recyclerview
- RecyclerView 添加下拉刷新和上拉加载更多
- RecyclerView添加下拉刷新和上拉加载更多
- RecyclerView封装--添加下拉刷新和上拉加载更多
- RecyclerView添加footer实现上拉加载的自定义style
- 自定义RecyclerView添加下拉刷新和上拉加载功能
- Android 简捷地为RecyclerView添加上拉加载
- 为RecyclerView添加分页加载(上拉加载更多)功能
- 扩展RecyclerView——为RecyclerView添加“上拉加载更多”
- 实现将当前时间信息以2位小时数、2位分钟数、2位秒数形式输出
- 关于远程服务器不能复制粘贴的解决方案
- boost库使用总结
- SQL
- while(scanf("%d",&n)!=EOF)
- recyclerview添加上拉加载显示加载状态
- Android--广播接收者(发送有序广播)
- 算法--2016搜狐面试:搜狐员工放假了,都玩什么?
- 浏览器窗口失去和获得焦点
- 翻译--https://github.com/ruanyf/react-demos/blob/master/README.md
- 第二次
- 判断终端类型(移动端还是pc端)的方法
- LeetCode之路:169. Majority Element
- Android-如何开发一个功能强大的ImagePicker