
原文出自王艳涛的专栏转载请注明出处!
概述
RecycleView作为Android中目前最流行的列表控件,为其添加下拉刷新和上滑加载功能后可以更加方便的展示、刷新、加载数据,节省界面空间,提升用户体验,本文主要介绍Android中RecycleView的下拉刷新和上滑加载功能实现。
实现思路
下拉刷新:不需要RecycleView自身实现,在布局文件中将RecycleView控件放到androi的SwipeRefreshLayout控件中,运行时,实现SwipeRefreshLayout.OnRefreshListener接口即可。
上滑加载:上滑加载目前有两种实现方式:
- 隐式加载:监听RecycleView的滑动状态,在RecycleView的滑动过程中,如果当前屏幕上显示的最后一个Item(即能看到的列表中的最底下一个Item),是RecycleView所有Item的最后一个时,就开始执行加载操作。这种方式下,不会显示的告诉用户执行加载操作,可以让用户认为数据原来就是这么多,滑不到底。
- 显示加载:在实现RecycleView的Adapter动态加载多布局的功能后,如果屏幕上显示的最后一个Item(即能看到的列表中的最底下一个Item),是RecycleView所有Item的最后一个(这个Item加载的布局是加载更多的提示,可以是文本“正在加载”,也可以是进度条,这种动态加载多布局通过使用自行封装的MutiLayoutAdapter适配器实现),并且此时用户的手指依然在屏幕上,并保持滑动状态,则进行加载操作。其中RecycleView所有Item的数量是真实数据data.size()+1,多出来的一个Item是用来显示提示的。这种方式,可以显示的提示用户去主动加载更多数据。这两种方式各有自己的优缺点:
- 当网络比较好时,加载数据的速度很快,第二种加载方式会显示的提示用户加载,在一定程度上回影响用户阅读的连贯性,第一种方式则不会,可以让用户保持连贯的阅读,不受影响;
- 当网络不是太好,加载数据的速度比较慢时,第二种方式的优点就呈现出来了,让用户知道数据正在加载,请稍等一会,而第一种方式不会提示,容易让用户误解认为没有数据了,从而退出浏览。
- 当联网加载数据时,如果用户对流量消耗比较敏感,第二种方式优点更大,除非用户手指依然屏幕上,并保持上滑状态时进行加载数据,否则不进行加载操作,避免自动加载数据引起用户对流量消耗的担心。
具体使用哪种方式,就看项目具体情况和要求了。
下拉刷新实现
在布局文件中在RecycleView的外层包上一个SwipeRefreshLayout,具体的布局代码就不贴了,下面是下拉刷新的代码实现。
SwipeRefreshLayout swipeRefreshLayout= (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if(!isLoading){
isLoading = true;
//刷新数据操作
//……
//刷新完成后,关闭SwipeRefreshLayout的刷新状态
swipeRefreshLayout.setRefreshing(false);
isLoading = false;
}
}
});
上滑加载实现
下文使用的两种Adaper是自行封装的,和本文上滑加载逻辑没有关系,具体功能和实现请参看BaseAdapter、MultiLayoutAdapter
隐式加载
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//使用的封装的BaseAdapter适配器
if (!isLoading && linearLayoutManager.
findLastVisibleItemPosition() == baseAdapter.getItemCount()-1){
//执行加载操作
isLoading = true;
//……
//执行完毕后
isLoading = false;
}
}
});
显式加载
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//使用的封装的MultiLayoutAdapter适配器
if (!isLoading
&& newState == RecyclerView.SCROLL_STATE_DRAGGING//用户手指在屏幕上,并保持滑动状态
&& linearLayoutManager.findLastVisibleItemPosition() == multiLayoutAdapter.getItemCount() -1){
//执行加载操作
isLoading = true;
//……
//执行完毕后
isLoading = false;
}
}
});
总结
通过实现下拉刷新和上滑加载功能后可以更加方便的展示、刷新、加载数据,节省界面空间,减少交互代价,提升用户体验。具体使用哪种上滑加载方式,可根据项目情况和要求进行选择。
网友评论