【威哥说】听说北京西站都可以刷脸进站了,各种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 的上拉加载了。
网友评论