美文网首页Android开发Android技术知识安卓资源收集
开发中如何实现RecyelerView上拉加载(磨砺营Andro

开发中如何实现RecyelerView上拉加载(磨砺营Andro

作者: 磨砺营 | 来源:发表于2016-11-30 10:58 被阅读134次

    【威哥说】听说北京西站都可以刷脸进站了,各种APP也都开始刷脸验证了,那还有什么是不能靠脸搞定的呢?对不起实打实的开发技术永远无法被“刷脸”代替。进入IT行业,你只能被迫的“明明可以靠脸吃饭,可偏偏要靠才华”。今天波波老湿就带大家一起增加以下自己的才华(磨砺营Android培训学习)。

    看过磨砺新闻直播课的小伙伴呢应该都熟悉这个流程了,我们如何给recyclerview定义上拉加载呢?首先分析一下思路:

    在RecyclerView的最下面一个item中定义我们的刷新样式,不管是圈圈还是自定义的动画都没问题,然后去监听他的滑动事件,当滑动到最底部时,我们的加载动画就显示出来了,当底部加载动画显示时,我们发送一个延时请求,去重新获取数据更新界面。

    接下来具体讲解一下步骤:

    1、通过重写getItemViewType方法,定义自己的标记,如下:

    //根据返回类型填充不同的ViewHolder

    @Override

    public int getItemViewType(int position) {

    if (position + 1 == getItemCount()) {

    return TYPE_FOOT;

    } else {

    return TYPE_NORMAL;

    }

    }

    2、这里定义的这个返回标记会在onCreateViewHolder方法中被回调到,也就是其中的viewType参数,根据这个viewType,我们去构建我们不同的布局,也就是ViewHolder

    @Override

    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    RecyclerView.ViewHolder holder = null;

    if (viewType == TYPE_NORMAL) {

    holder = new ItemViewHolder(LayoutInflater.from(

    context).inflate(R.layout.recycle_item, parent,

    false));

    } else if (viewType == TYPE_FOOT) {

    //底部加载布局

    holder = new FootViewHolder(LayoutInflater.from(context)

    .inflate(R.layout.itemfooter, parent, false));

    }

    return holder;

    }

    这里要注意的一点就是:我们占用了最底部的item所以在重写getItemCount方法时,要添加上一条数据,否则数据不对等

    @Override

    public int getItemCount() {

    return msg_list.size() + 1 ;

    }

    3、监听recyclerView的滑动事件

    //recyclervice的滑动监听

    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

    @Override

    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

    super.onScrollStateChanged(recyclerView, newState);

    //根据下面实时获取到的滑动位置进行监听。如果到底部了,进行刷新数据

    //判断条件:1、滑动到底部;2、状态保持稳定,不上下滑动了

    if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1

    == recycle_adapter.getItemCount()) {

    mHandler.postDelayed(new Runnable() {

    @Override

    public void run() {

    //内部执行延时的请求数据刷新操作

    now_num = now_num+3; //每次加载的条数

    initData();

    recycle_adapter.notifyDataSetChanged();

    mSwipeRefreshLayout.setRefreshing(false);

    }

    },1000);

    }

    }

    @Override

    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

    super.onScrolled(recyclerView, dx, dy);

    LinearLayoutManager lm= (LinearLayoutManager) recyclerView.getLayoutManager();

    //当一滑动时,获取到当前的位置

    lastVisibleItem =lm.findLastVisibleItemPosition();

    }

    });

    }

    如此这般,就完成了RecyelerView 的上拉加载了。

    相关文章

      网友评论

        本文标题:开发中如何实现RecyelerView上拉加载(磨砺营Andro

        本文链接:https://www.haomeiwen.com/subject/yazzpttx.html