今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的应用显示数据列表时都用到了。自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难,只要是对滑动事件的监听和处理。
<强> 1,如何判断RecyclerView是在上滑还是下滑强>
在RecyclerView的OnScrollListener滑动事件监听中有个好用的方法,就是onScrolled (RecyclerView RecyclerView, int dx, dy int),其中根据dx的值的正负就可以判断是在左滑还是右滑,而根据dy的值就可以判断是在上滑还是下滑。
//上滑 如果(dy> 0) {//相应操作代码 }//下滑 else if (dy<0) {//相应操作代码 }
<强> 2,如何判断是否滑到了顶部或者底部强>
同样在RecyclerView的OnScrollListener滑动事件监听中onScrolled (RecyclerView RecyclerView, int dx, dy int)方法中处理,根据canScrollVertically (int方向)来进行判断。
//是否滑到底部 如果(! recyclerView.canScrollVertically (1)) {//相应处理操作 }//是否滑到顶部 如果(! recyclerView.canScrollVertically (1)) {//相应处理操作 }
<强> 3,自定义RecyclerView 强>
知道了滑动事件的判断和处理,就可以很轻松得实现下拉刷新和加载更多了。
进口android.content.Context; 进口android.support.annotation.Nullable; 进口android.support.v7.widget.RecyclerView; 进口android.util.AttributeSet; 进口android.util.Log;/* * *包:com.liuting.library *作者:流亭 *日期:2017/2/14 *描述:自定义RecycleView,下拉刷新以及上拉加载更多 */公开课RefreshLoadMoreRecycleView延伸RecyclerView { 私人布尔isLoadMore;//是否可以加载更多标志 私人布尔isLoadEnd;//加载到最后的标志 私人布尔isLoadStart;//顶部的标志 私人布尔isRefresh;//是否可以下拉刷新标志 私人int lastVisibleItem;//最后一项 私人IOnScrollListener侦听器;//事件监听 公共RefreshLoadMoreRecycleView(上下文语境){ 超级(上下文); init(上下文); } 公共RefreshLoadMoreRecycleView(上下文语境,@Nullable AttributeSet attrs) { 超级(上下文,attrs); init(上下文); } 公共RefreshLoadMoreRecycleView(上下文语境,@Nullable AttributeSet attrs, int defStyle) { 超级(上下文、attrs defStyle); init(上下文); } 公共空间init(上下文语境){ isLoadEnd=false; isLoadStart=true; 这一点。addOnScrollListener(新RecyclerView.OnScrollListener () { @Override 公共空间> & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; LinearLayout & lt; xmlns: android=" http://schemas.android.com/apk/res/android " xmlns:工具=" http://schemas.android.com/tools " android: id=癅 + id/activity_main” android: layout_width=" match_parent " android: layout_height=" match_parent " android:取向=按怪薄? 工具:上下文=癱om.liuting.refreshloadmorelistview.MainActivity”比; & lt; com.liuting.library.RefreshLoadMoreRecycleView android: id=癅 + id/main_recycle_view_data” android: layout_width=" match_parent " android: layout_height=" match_parent " android:滚动条="没有"/比; & lt;/LinearLayout> >之前<强> 2,定义RecyclerView.Adapter 强>
RecyclerView.Adapter在这里就简单处理了,列表布局直接使用Android自带的。
进口android.content.Context; 进口android.support.v7.widget.RecyclerView; 进口android.view.LayoutInflater; 进口android.view.View; 进口android.view.ViewGroup; 进口android.widget.TextView; 进口并不知道;/* * *包:com.liuting.refreshloadmorelistview.adapter *作者:流亭 *日期:2017/2/16 *描述:列表适配器 */公开课RefreshLoadMoreRecycleAdapter延伸RecyclerView.Adapter{ 私人List 列表; 私人上下文语境; 公共RefreshLoadMoreRecycleAdapter(上下文语境,List 列表){ 这一点。上下文=上下文; 这一点。列表=; } @Override 公共RefreshLoadMoreRecycleAdapter.ViewHolder> 进口android.app.ProgressDialog; 进口android.os.Bundle; 进口handler; 进口android.os.Message; 进口android.support.v7.app.AppCompatActivity; 进口android.support.v7.widget.LinearLayoutManager; 进口android.widget.Toast; 进口com.liuting.library.RefreshLoadMoreRecycleView; 进口com.liuting.refreshloadmorelistview.adapter.RefreshLoadMoreRecycleAdapter; 进口java.util.ArrayList; 进口并不知道; 公共类MainActivity AppCompatActivity延伸实现RefreshLoadMoreRecycleView.IOnScrollListener { 私人RefreshLoadMoreRecycleView recycleView;//下拉刷新recycleView 私人List Android之RecyclerView轻松实现下拉刷新和加载更多示例