Fellow Travellers

Android Recycler View 使用解析

肖健
字数统计: 981阅读时长: 3 min
2017/02/17 Share

移动应用团队代码走查(20170217)

1 摘要

走查主题:Android RecyclerView 使用解析

主讲人员:肖健

参加人员:杨龙、万峥嵘、汪洋。

走查时间:2017年2月17日星期五下午16:00到17:30

走查地点:公司负一楼

2 走查内容

2.1 RecyclerView简介

在android L的预览版中,最新的v7支持包新添加了两个控件:RecyclerView和CardView。今天讲解的RecyclerView是经典的ListView的进化与升 华,与ListView比起来具有高度的解耦、更加灵活的特性,但也因此引入了一定的复杂性。

2.2 RecyclerView的使用方式

我们可以通过导入Support-v7包进行使用:
Recyclerview 有充分的定制自由,它可实现以下多种效果:

1.listview横向、纵向数据展示。

2.gridview网格布局数据展示。

3.StaggeredGrid瀑布流式布局数据展示。

想要实现效果,只需要为Recyclerview设置布局管理器及关联adapter就可以显示数据展示效果,其使用代码:

//找到Recyclerview控件

mRecyclerView = findView(R.id.id_recyclerview);

①.listview代码设置:

//设置布局管理器

mRecyclerView.setLayoutManager(new LinearLayoutManager(dataActivity));

//设置adapter

mRecyclerView.setAdapter(adapter)。

一般情况下如果不设置滑动方向,默认是纵向滑动,想要实现横向滑动,只需要在设置布局管理器的地方做更改就可以:

//设置布局管理器

// mRecyclerView.setLayoutManager(new LinearLayoutManager(dataActivity));

替换成以下布局就好:

mRecyclerViewsetLayoutManager(new LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false));

②.girdview代码设置:

//设置布局管理器

mRecyclerView.setLayoutManager(new GridLayoutManager(this,4));//只需要更改布局管理器就可实现效果。

//设置adapter

mRecyclerView.setAdapter(adapter)。

③.瀑布流式代码设置:

此效果与gridview效果一致,如果需要实现瀑布流式效果,只需要在adapter的onBindViewHolder方法中为我们的item设置个随机的高度就可以,当然也支持横向和纵向数据展示:

//设置布局管理器

mRecyclerView.setLayoutManager(newStaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//纵向

//mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL));//横向

//设置adapter

mRecyclerView.setAdapter(adapter)。

下面是在adapter中引入item xml文件的设置方法代码:

@Override
public AttachmentMaterHolderonCreateViewHolder(ViewGroup    parent, int viewType) {
    View view= LayoutInflater.from(context).inflate(R.layout.material_list_item,null);

    //此处为引入item的xml文件比较简单就不贴出来了。

    AttachmentMaterHolder holder=new AttachmentMaterHolder(view);

    return holder;
}

Activity的布局文件

< RelativeLayout
    xmlns:Android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    < android.support.v7.widget.RecyclerView
             android:id="@+id/id_recyclerview"
             android:divider="#ffff0000"
             android:dividerHeight="10dp"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
</ RelativeLayout > 

在Acitvity中的onCreate中引用代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    mRecyclerView = findView(R.id.id_recyclerview);
    //设置布局管理器
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    //设置adapter
    mRecyclerView.setAdapter(new AttachmentMaterAdapter(this,“数据集”));
}

以上代码是实现初步的简单效果大致为:

listview、gridview、瀑布流式效果:

为了实现更炫酷的效果,我们可加入可选操作:

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

mRecyclerView.setItemAnimator(new DefaultItemAnimator());

这是系统为我们提供的一个默认的实现类,值得注意,这里更新数据集需要用 notifyItemInserted(position)与notifyItemRemoved(position) ,而不是notifyDataSetChanged()否则没有动画效果。

其中分割线的添加需要在代码中设置:

//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL_LIST));

其中ItemDecoration需要我们自己去实现,重写该方法计算分割线。

在Recyclerview中如果我们需要添加点击事件或者长按事件需要我们自己在adapter中去添加代码实现adapter的点击事件,值得注意的地方是它的插入和删除数据的时候刷新是先调用notifyItemChanged(position);

再调用:notifyItemRangeChanged(position, itemCount);

3 问题讨论

1.Recyclerview与其他控件的区别及优势,操控的复杂程度?

2.此控件在我们的项目中哪些地方有用到?效率如何?

3.UI的设计方面可借助于哪些框架?

CATALOG
  1. 1. 移动应用团队代码走查(20170217)
    1. 1.1. 1 摘要
    2. 1.2. 走查主题:Android RecyclerView 使用解析
    3. 1.3. 主讲人员:肖健
    4. 1.4. 参加人员:杨龙、万峥嵘、汪洋。
    5. 1.5. 走查时间:2017年2月17日星期五下午16:00到17:30
    6. 1.6. 走查地点:公司负一楼
    7. 1.7. 2 走查内容
      1. 1.7.1. 2.1 RecyclerView简介
      2. 1.7.2. 2.2 RecyclerView的使用方式
    8. 1.8. 3 问题讨论
      1. 1.8.1. 1.Recyclerview与其他控件的区别及优势,操控的复杂程度?
      2. 1.8.2. 2.此控件在我们的项目中哪些地方有用到?效率如何?
      3. 1.8.3. 3.UI的设计方面可借助于哪些框架?