iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >RecyclerView上拉加载封装代码
  • 874
分享到

RecyclerView上拉加载封装代码

recyclerview上拉加载recycle 2023-05-30 21:05:07 874人浏览 泡泡鱼
摘要

RecyclerView上拉加载,先看效果:网上有很多这类得框架,不过在自己的项目只用到上拉加载的功能,所以自己封装一个简单点的。主要依赖BaseRecyPRAdapter这类public abstract class BaseRecyPR

RecyclerView上拉加载,先看效果:

RecyclerView上拉加载封装代码

网上有很多这类得框架,不过在自己的项目只用到上拉加载的功能,所以自己封装一个简单点的。

主要依赖BaseRecyPRAdapter这类

public abstract class BaseRecyPRAdapter<T> extends RecyclerView.Adapter<BaseRecyPRAdapter.BaseViewHolder> {  private static final String TAG = "BaseRecyPRAdapter";  public static final int VIEW_ITEM = 0;  public static final int VIEW_PROG = 1;  public List<T> mDataList;  private final Context mContext;  private final RecyclerView mRecyclerView;  private int totalItemCount;  private int lastVisibleItemPosition;  boolean isshowFootVieW = false;  private Handler handler = new Handler();  private static final int STATE_NORMAL = 0;  private static final int STATE_LOADING = 1;  private static final int STATE_LOAD_COMPLETE = 2;  private int mState = STATE_NORMAL;  public BaseRecyPRAdapter(Context context, RecyclerView recyclerView) {    mContext = context;    mRecyclerView = recyclerView;    if (mRecyclerView.getLayoutManager() instanceof LinearLayoutManager) {      final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();      mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {        @Override        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {          super.onScrollStateChanged(recyclerView, newState);          int extent = recyclerView.computeVerticalScrollExtent();          int range = recyclerView.computeVerticalScrollRange();          Log.e(TAG, "\n extent = " + extent + "\n range = " + range);          if (range > extent) {            if(!isShowFootVieW){              notifyDataSetChanged();            }            isShowFootVieW = true;          } else {            isShowFootVieW = false;          }          totalItemCount = linearLayoutManager.getItemCount();          if (mState == STATE_NORMAL && newState == RecyclerView.SCROLL_STATE_IDLE &&              totalItemCount == lastVisibleItemPosition + 1 && range > extent) {            mState = STATE_LOADING;            handler.post(new Runnable() {              @Override              public void run() {                if (mLoadMoreDataListener != null) {                  mLoadMoreDataListener.loadMoreData();                }              }            });          }        }        @Override        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {          super.onScrolled(recyclerView, dx, dy);          lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();        }      });    }  }  @Override  public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    BaseViewHolder holder = null;    View view = null;    if (viewType == VIEW_PROG) {      view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer, parent, false);    } else {      view = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(viewType), parent, false);    }    holder = new BaseViewHolder(view);    return holder;  }  @Override  public void onBindViewHolder(BaseViewHolder holder, int position) {    if (holder.getItemViewType() == BaseRecyPRAdapter.VIEW_PROG) {//      LogTool.LogE_DEBUG(TAG, "onBindViewHolder--->" + mState);      ProgressBar progressBar = (ProgressBar) holder.getView(R.id.progressbar);      TextView text = (TextView) holder.getView(R.id.text);      if (mState == STATE_LOAD_COMPLETE) {        progressBar.setVisibility(View.GoNE);        text.setText(mContext.getString(R.string.没有数据了));      } else {        progressBar.setVisibility(View.VISIBLE);        text.setText(mContext.getString(R.string.正在加载中));      }    }    if (holder.getItemViewType() == BaseRecyPRAdapter.VIEW_ITEM) {      onBindData(holder, position);    }  }  @Override  public int getItemCount() {    if (isShowFootVieW) {      return mDataList == null ? 0 : mDataList.size() + 1;    } else {      return mDataList == null ? 0 : mDataList.size();    }  }  //根据不同的数据返回不同的viewType  @Override  public int getItemViewType(int position) {    if (mDataList == null)      return VIEW_ITEM;    if (position == mDataList.size()) {      return VIEW_PROG;    } else {      return VIEW_ITEM;    }  }    public abstract int getLayoutId(int type);  public abstract void onBindData(BaseViewHolder holder, int position);  public static class BaseViewHolder extends RecyclerView.ViewHolder {    private Map<Integer, View> mViewMap;    public View view;    public BaseViewHolder(View itemView) {      super(itemView);      view = itemView;      mViewMap = new HashMap<>();    }        public View getView(int id) {      View view = mViewMap.get(id);      if (view == null) {        view = itemView.findViewById(id);        mViewMap.put(id, view);      }      return view;    }  }  public void stopLoadMore() {    mState = STATE_NORMAL;    notifyDataSetChanged();  }  public void loadComplete() {    mState = STATE_LOAD_COMPLETE;    notifyItemChanged(getItemCount()-1);  }  public void setData(List<T> datas) {    mDataList = datas;  }  private LoadMoreDataListener mLoadMoreDataListener;  public void setLoadMoreDataListener(LoadMoreDataListener mLoadMoreDataListener) {    this.mLoadMoreDataListener = mLoadMoreDataListener;  }  public interface LoadMoreDataListener {    void loadMoreData();  }}

--结束END--

本文标题: RecyclerView上拉加载封装代码

本文链接: https://www.lsjlt.com/news/221420.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RecyclerView上拉加载封装代码
    RecyclerView上拉加载,先看效果:网上有很多这类得框架,不过在自己的项目只用到上拉加载的功能,所以自己封装一个简单点的。主要依赖BaseRecyPRAdapter这类public abstract class BaseRecyPR...
    99+
    2023-05-30
    recyclerview 上拉加载 recycle
  • 基于vue封装下拉刷新上拉加载组件
    基于vue和原生javascript封装的下拉刷新上拉加载组件,供大家参考,具体内容如下 upTilte插槽是下拉刷新的自定义内容放的地方 downTilte插槽是...
    99+
    2024-04-02
  • Android中封装RecyclerView实现添加头部和底部示例代码
    前言我们大家都知道ListView具有添加头部和添加底部的方法,但是RecyclerView并没有这样子的方法。所以RecyclerView是不能添加底部和头部的,但是能不能仿造ListView来实现RecyclerView添加头部和底部呢...
    99+
    2023-05-30
    android recyclerview封装 头部尾部
  • AndroidFlutter实现上拉加载组件的示例代码
    前言 在此之前对列表下拉刷新做了调整方案,具体介绍可以阅读下拉刷新组件交互调整。既然列表有下拉刷新外当然还有上拉加载更多操作了,本次就来介绍如何为列表增加上拉加载更多的交互实现。 实...
    99+
    2024-04-02
  • vue基于vant实现上拉加载下拉刷新的示例代码
    前言 普遍存在于各种app中的上拉加载下拉刷新功能大家都不陌生吧,一般来说,在数据量比较大的情况下,为了更快的渲染和给用户更好的观感体验,我们会将数据做分页处理,让其批量加载,这样一...
    99+
    2024-04-02
  • 如何在Android中利用Recyclerview实现一个上拉加载功能
    如何在Android中利用Recyclerview实现一个上拉加载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能,下拉...
    99+
    2023-05-31
    android recyclerview recycle
  • 在Android项目中使用RecyclerView实现一个上拉加载下拉刷新功能
    这篇文章给大家介绍在Android项目中使用RecyclerView实现一个上拉加载下拉刷新功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心实现package com.example.fly.recyclervi...
    99+
    2023-05-31
    recyclerview android recycle
  • uniapp实现下拉刷新与上拉触底加载功能的示例代码
    目录下拉刷新上拉触底加载 完整demo 效果 下拉刷新 这个用于监听该页面用户下拉刷新事件。 首先在pages.json中需要下拉刷新的页面,在styl...
    99+
    2023-05-16
    uniapp实现下拉刷新 uniapp实现上拉触底加载 uniapp下拉刷新 uniapp上拉加载
  • Vue实现上拉加载下一页效果的示例代码
    之前从来没有单独的做过手机端的网页。当然,之前我也没有独立的从切图到写代码交互做过前端的页面。 这里边的分页还是和响应电脑端的数字分页。但是,其实独立做一个手机端的网站,而不是响应式...
    99+
    2024-04-02
  • 在Android项目中使用RecyclerView实现一个上拉加载更多功能
    在Android项目中使用RecyclerView实现一个上拉加载更多功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。既然有刷新的时候有两种状态就要定义两个状...
    99+
    2023-05-31
    android recyclerview recycle
  • 如何封装代码
    本篇内容介绍了“如何封装代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么要封装代码?我们经常听说:...
    99+
    2024-04-02
  • AnglarJs中如何实现上拉加载
    这篇文章给大家分享的是有关AnglarJs中如何实现上拉加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现页面 <div class="s...
    99+
    2024-04-02
  • Flutter实现下拉刷新和上拉加载更多
    本文实例为大家分享了Flutter实现下拉刷新和上拉加载更多的具体代码,供大家参考,具体内容如下 效果 下拉刷新 如果实现下拉刷新,必须借助RefreshIndicator,在li...
    99+
    2024-04-02
  • React-View-UI组件库封装Loading加载中源码
    目录组件介绍Loading API能力组件源码组件测试源码组件库线上地址组件介绍 Loading组件是日常开发用的很多的组件,这次封装主要包含两种状态的Loading,旋转、省略号,...
    99+
    2024-04-02
  • 怎么从gitee上拉代码
    本篇内容介绍了“怎么从gitee上拉代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一步:注册Gitee账号如果你还没有Gitee账号,...
    99+
    2023-07-05
  • 小程序怎么实现上拉刷新下拉加载
    这篇文章主要介绍“小程序怎么实现上拉刷新下拉加载”,在日常操作中,相信很多人在小程序怎么实现上拉刷新下拉加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么实现上拉刷新下拉加载”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • MUI如何实现上拉刷新/下拉加载功能
    小编给大家分享一下MUI如何实现上拉刷新/下拉加载功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!新闻信息列表必备的功能,支持...
    99+
    2024-04-02
  • dropload.js插件下拉刷新和上拉加载怎么用
    小编给大家分享一下dropload.js插件下拉刷新和上拉加载怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下第...
    99+
    2024-04-02
  • uniapp怎么实现上拉加载更多
    随着智能手机的广泛普及,移动端应用的开发与需求不断增加。而在移动端应用中,上拉加载更多成为了一个重要的功能。在uniapp中,上拉加载更多操作的实现相对简单,仅需要进行一些基本的配置即可实现。本文将介绍uniapp中上拉加载更多的实现方法。...
    99+
    2023-05-14
  • mui如何实现上拉加载功能
    这篇文章给大家分享的是有关mui如何实现上拉加载功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近在做移动端的项目,用到了mui的上拉加载,整理如下:1、需要引入的css、j...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作