Android之XRecyclerView使用详解

XRecyclerView是实现了下拉刷新、滚动到底部加载更多和自定义添加header等多个特点于一身的第三方库,使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater(所以个人感觉使用非常方便)。 加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。

项目地址:https://github.com/jianghejie/XRecyclerView

效果展示:


首先添加在项目buid.gradle上添加依赖地址

//1.6.0 is the main

implementation 'com.jcodecraeer:xrecyclerview:1.6.0'

创建方式和平常的RecyclerView一样

LinearLayoutManagerlayoutManager=newLinearLayoutManager(getActivity());

layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

mRecyclerView.setLayoutManager(layoutManager);

mRecyclerView.setAdapter(mAdapter);

下拉刷新、上拉加载更多:

上拉和下拉都是默认就可以使用的(如果需要关闭该功能需要代码中设置),XRecyclerView中提供一个回调去触发下拉和上拉事件

mRecyclerView.setLoadingListener(newXRecyclerView.LoadingListener() {

       @Override

       publicvoidonRefresh() {

             //refresh data here

       }

       @Override

       publicvoidonLoadMore() {

             //load more data here

       }

});

1.5.7版本的新功能

mRecyclerView

         .getDefaultRefreshHeaderView()//获取默认的头部布局

         .setRefreshTimeVisible(true);//展示刷新时间,false为不展示

          //if you are not sure that you are 100% going to

          //have no data load back from server anymore,do not use this

         @Deprecated

         public void setEmptyView(ViewemptyView) {

                 ...

         }

1.5.6版本新功能,解决内存泄漏问题,使用下面的代码释放XRecyclerView的内存


//any time,when you finish your activity or fragment,call this below

if(mRecyclerView!=null){ 

          mRecyclerView.destroy();//这行代码将完全释放XR的内存

          mRecyclerView=null;

}

1.5.3版本新功能,可以在粘性滚动布局使用XR

     android:id="@+id/StickyScrollLinearLayout"

     android:orientation="vertical"

     android:layout_width="match_parent"

     android:layout_height="match_parent">

     

          android:id="@+id/XRecyclerView"

          android:layout_width="match_parent"

          android:layout_height="match_parent">

     

finalStickyScrollLinearLayouts=

(StickyScrollLinearLayout) findViewById(R.id.StickyScrollLinearLayout);

s.addOnLayoutChangeListener(

         newView.OnLayoutChangeListener() {

        @Override

        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {

        if(s.getContentView()!=null)

        return;

       //放在这里是为了等初始化结束后再添加,防止 height 获取 =0

       //add from here just in cause they height==0

      s.setInitInterface(

      newStickyScrollLinearLayout.StickyScrollInitInterface() {

      @Override

      publicViewsetTopView() {

      returntopView;

                                    }

     @Override

     publicViewsetTabView() {

     returntabView;

                                    }

    @Override

    publicViewsetContentView() {

    returncontent;

                                    }

                                }

                        );

    }

    }

通知移除item、通知插入item,记得使用XRecyclerview内部的功能

listData.remove(pos);

mRecyclerView.notifyItemRemoved(listData,pos);

当然当下拉刷新或上拉加载更多结束后,你必须通知RecyclerView,你可以使用

mRecyclerView.loadMoreComplete();//通知上拉加载结束

mRecyclerView.refreshComplete();//通知下拉刷新结束

最好控制一个屏幕中item的数量是集合的长度减2(list.size-2)的时候进行刷新

mRecyclerView.setLimitNumberToCallLoadMore(2);//默认是 1

效果如下:


手动调用刷新(使用refresh() 替代了先前的setRefreshing()方法)

mRecyclerView.refresh();

自定义下拉和上拉的样式style

下拉刷新和上拉加载更多可以更好的自定义

自定义加载样式

使用内置的AVLoadingIndicatorView,在AVLoadingIndicatorView库中提供了所有的效果,此外我们添加了系统样式,你可以使用

mRecyclerView.setRefreshProgressStyle(int style);

mRecyclerView.setLaodingMoreProgressStyle(int style);

分别设置下拉刷新进度样式和上拉加载更多进度样式

下面展示一些常用进度样式效果:

mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);


mRecyclerView.setLaodingMoreProgressStyle(ProgressStyle.SquareSpin);


BallPulse 效果


 在ProgressStyle class中我们可以看到所有的效果,你可以选择自己喜欢的在自己的项目代码中使用

publicclassProgressStyle{

     publicstaticfinalintSysProgress=-1;

     publicstaticfinalintBallPulse=0;

     publicstaticfinalintBallGridPulse=1;

     publicstaticfinalintBallClipRotate=2;

     publicstaticfinalintBallClipRotatePulse=3;

     publicstaticfinalintSquareSpin=4;

     publicstaticfinalintBallClipRotateMultiple=5;

     publicstaticfinalintBallPulseRise=6;

     publicstaticfinalintBallRotate=7;

     publicstaticfinalintCubeTransition=8;

     publicstaticfinalintBallZigZag=9;

     publicstaticfinalintBallZigZagDeflect=10;

     publicstaticfinalintBallTrianglePath=11;

     publicstaticfinalintBallScale=12;

     publicstaticfinalintLineScale=13;

     publicstaticfinalintLineScaleParty=14;

     publicstaticfinalintBallScaleMultiple=15;

     publicstaticfinalintBallPulseSync=16;

     publicstaticfinalintBallBeat=17;

     publicstaticfinalintLineScalePulseOut=18;

     publicstaticfinalintLineScalePulseOutRapid=19;

     publicstaticfinalintBallScaleRipple=20;

     publicstaticfinalintBallScaleRippleMultiple=21;

     publicstaticfinalintBallSpinFadeLoader=22;

     publicstaticfinalintLineSpinFadeLoader=23;

     publicstaticfinalintTriangleSkewSpin=24;

     publicstaticfinalintPacman=25;

     publicstaticfinalintBallGridBeat=26;

     publicstaticfinalintSemiCircleSpin=27;

}

刷新箭头icon


如果你不喜欢的话也可以使用下面代码替换掉

mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);

使下拉刷新和上拉加载更多失效

mRecyclerView.setPullRefreshEnabled(false);

或者

mRecyclerView.setPullRefreshEnabled(true);

Viewheader=LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);

给XRecyclerView添加头部布局,只需调用addHeaderView().

mRecyclerView.addHeaderView(header);

当然你喜欢的话也可以添加多个头部布局

Viewheader=LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);

Viewheader1=LayoutInflater.from(this).inflate(R.layout.recyclerview_header1, (ViewGroup)findViewById(android.R.id.content),false);

mRecyclerView.addHeaderView(header);

mRecyclerView.addHeaderView(header1);

优化:

XRecyclerView底部默认会有一小段空白区域,因为它本身默认有footView,如果想要去除底部空白可以使用:getDefaultFootView().removeAllViews()方法

你可能感兴趣的:(Android之XRecyclerView使用详解)