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

<com.jcodecraeer.xrecyclerview.StickyScrollLinearLayout

     android:id="@+id/StickyScrollLinearLayout"

     android:orientation="vertical"

     android:layout_width="match_parent"

     android:layout_height="match_parent">

     <com.jcodecraeer.xrecyclerview.XRecyclerView

          android:id="@+id/XRecyclerView"

          android:layout_width="match_parent"

          android:layout_height="match_parent">

     </com.jcodecraeer.xrecyclerview.StickyScrollLinearLayout>

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()方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容