美文网首页
RecyclerView浅析

RecyclerView浅析

作者: Rick000 | 来源:发表于2017-07-05 10:29 被阅读0次

    1、简介:可以把它看作是ListView、GridView等的包装产品,可以轻松实现上述俩的功能,并能用简单的code完成复杂的需求:数据加载+item间隔样式+item的增减动画+click事件(click+longclick)

    2、使用RecyclerView时如果项目报错:

    (1)检查ExternalLibraries下是否有RecyclerView相关信息,若没有检查SDKManageer下是否有更新

    (2)在app-build.gradle中添加:compile 'com.android.support:recyclerview-v7:25.3.1'

    3、操作RecyclerView的代码:

    recyclerView = findView(R.id.id_recyclerview);mRecyclerView.setLayoutManager(layout);

    a、LinearLayoutManager:线性布局,横向或者纵向滑动列表

    b、GridLayoutManager:表格布局

    c、StaggeredGridLayoutManager:流式布局,例如瀑布流效果

    //设置adapter

    recyclerView.setAdapter(adapter)

    //设置Item增加、移除动画

    recyclerView.setItemAnimator(newDefaultItemAnimator());

    //添加分割线

    recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.HORIZONTAL_LIST));

    4、ItemDecoration:

    首先要弄清楚几个名词含义,itemview、divider

    方法的执行顺序

    getItemOffsets(通过outRect.set(l,t,r,b)设置指定itemview的paddingLeft,paddingTop,paddingRight,paddingBottom)

    ->onDraw(在绘制itemview之前绘制divider)

    4、具体使用详见大神文章:

    Android RecyclerView 使用完全解析 体验艺术般的控件)http://blog.csdn.net/lmj623565791/article/details/45059587

    上述文章在使用StaggeredGridLayoutManager ItemDecoration有两个问题:

    (1)设置item间隔时最后一列右边是不需要间隔的,但是会造成最后一列和其他列的宽度不一致,可以将getItemOffsets方法中的所有mDivider.getIntrinsicWidth()替换为如下right:

    int column=itemPosition%spanCount;

    int right=mDivider.getIntrinsicWidth()-(column+1)*mDivider.getIntrinsicWidth()/spanCount;

    PS:关于ItemDecoration的详细理解参加参见:

    https://blog.piasy.com/2016/03/26/Insight-Android-RecyclerView-ItemDecoration/#fn:space-needed

    (2)如果数据总数num%列数col==0,底部的divider也是不需要显示的,在isLastRow方法中修改如下:

    childCount = childCount - (childCount % spanCount==0?spanCount:childCount % spanCount);

    项目下载地址:https://github.com/jacksonrickq1/RecyclerViewDemo

    PS(上传代码到git参考:http://www.jianshu.com/p/3e6094c15a46?_t_t_t=0.30564603745006025)

    相关文章

      网友评论

          本文标题:RecyclerView浅析

          本文链接:https://www.haomeiwen.com/subject/dhaxhxtx.html