美文网首页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