Android新控件RecyclerView剖析

传智·没羽箭(传智播客北京校区Java学院高级讲师)

个人简介:APKBUS专家之一,黑马技术沙龙会长,在移动领域有多年的实际开发和研究经验,精通HTML5、Oracle、J2EE 、Java Web编程、对Android应用开发与平台开发有较深入研究。从基础到高级的课程中,授课风格深受学员的喜爱。

Android L版本中新增了RecyclerView,用于显示复杂视图的新增Widget。

一、RecyclerView

替代ListView的RecyclerView使ViewHolder标准化,在ListView中,convertView是复用的,在RecyclerView中,是把ViewHolder作为缓存的单位,convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设没有屏幕显示10个条目,则会创建10个ViewHolder缓存起来,每次复用的是ViewHolder,所以他把getView这个方法变为了onCreateViewHolder。ViewHolder更适合多种子布局的列表,尤其IM的对话列表。RecyclerView不提供setOnItemClickListener方法,你可以在ViewHolder中添加事件。RecyclerView的使用可以参考《Material Design UIWidgets》。

二、RecyclerView可以实现横向、纵向滑动视图

每个item的布局如下:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="72dp"

android:layout_margin="3dp"

android:background="#0000ff"

>

<TextView

android:id="@+id/text"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

/>

</FrameLayout>

item的布局很简单,只有一个TextView,然后需要使用到RecyclerView,所以需要把support v7添加到class path,并在布局中添加该控件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<android.support.v7.widget.RecyclerView

android:id="@+id/recyclerView"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

</RelativeLayout>

然后在onCreate中:

mDatas = new ArrayList<>();

for (int i = 0; i < 100; i++) {

mDatas.add("我是item---" + i);

}

LinearLayoutManager manager = new LinearLayoutManager

(this,LinearLayoutManager.HORIZONTAL,false);

adapter = new SimpleAdapter(this, mDatas);

recyclerView.setAdapter(adapter);

recyclerView.setLayoutManager(manager);

recyclerView.setItemAnimator(new DefaultItemAnimator());

直接看代码:

Public class

SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.MyViewHolder> {

private Context mContext;

private List<String> mDatas;

private final LayoutInflater inflater;

public SimpleAdapter(Context mContext, List<String> mDatas) {

this.mContext = mContext;

this.mDatas =mDatas;

inflater = LayoutInflater.from(mContext);

}

@Override

public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

View view = inflater.inflate

(R.layout.item_main, viewGroup, false);

MyViewHolder viewHolder = new MyViewHolder(view);

return viewHolder;

}

@Override

public void onBindViewHolder(final MyViewHolder holder, final int position) {

holder.text.setText(mDatas.get(position));

}

@Override

public int getItemCount() {

return mDatas.size();

}

class MyViewHolder extends RecyclerView.ViewHolder{

public final

TextView text;

public MyViewHolder(View itemView) {

super(itemView);

text = (TextView) itemView.findViewById(R.id.text);

}

}

}

如上代码所示:

publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)

这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。方法是把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写,直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。

public voidonBindViewHolder(RecyclerView.ViewHolder viewHolder, int i)这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 16:40:36

Android新控件RecyclerView剖析的相关文章

Android新控件RecyclerView浅析及上拉和下拉刷新

概述: RecyclerView是android-support-v7-21版本中新增的一个Widgets,RecyclerView是ListView的升级版本,更加先进和灵活.在以后的开发中我们就可以直接使用RecyclerView来替换ListView. 特点介绍: 1. 可横向展示 2. 消除错位问题 3. 标准化了ViewHolder 横向: private void initHorizaontal(List<ItemModel> models) { RecyclerView recy

Android 新控件RecyclerView

RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets.我们可以使用RecyclerView非常简单的实现横向竖向的ListView.GridView.以及瀑布流的效果.先看一下项目的实现的效果 是不是很炫?使用RecyclerView可以非常简单的实现. RecyclerView 特性 1.不关心Item是否显示在正确的位置以及如何显示 2.不关心item之间如何分割 3.不关注Item增加与删除的动画效果 4.它仅仅只是关注如何回收和复用i

android L新控件RecyclerView详解与DeMo

介绍 在谷歌的官网我们可以看到它是这样介绍的:RecyclerView is a more advanced and flexible version of ListView. This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the RecyclerView widget when you have lists with eleme

新控件RecyclerVIew的介绍和兼容使用的方法

RecyclerVIew是一个可以替代listview和Gallery的有效空间而且在support-v7中有了低版本支持,具体使用方式还是规规矩矩的适配器加控件模式.我们先来看看官网的介绍: 介绍 RecyclerView  is a more advanced and flexible version of  ListView . This widget is a container for large sets of views that can be recycled and scrol

android 新控件 AppBarLayout 使用

AppBarLayout 是继承LinerLayout实现的一个ViewGroup容器组件,它是为了Material Design设计的App Bar,支持手势滑动操作. 默认的AppBarLayout是垂直方向的,它的作用是把AppBarLayout包裹的内容都作为AppBar.代码布局如下: <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width=&qu

Android基础控件——RecyclerView实现拖拽排序侧滑删除效果

RecyclerView实现拖拽排序侧滑删除效果 事先说明: RecyclerView是ListView的升级版,使用起来比ListView更规范,而且功能和动画可以自己添加,极容易扩展,同样也继承了ListView复用convertView和ViewHolder的优点.   思路分析: 1.导包.在布局中使用RecyclerView 2.需要一个JavaBean用来存储展示信息 3.需要一个填充RecyclerView的布局文件 4.在代码中找到RecyclerView,并为其绑定Adapte

Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

[转载请注明出处:http://blog.csdn.net/feiduclear_up/article/details/46514791 CSDN 废墟的树] 上一篇博客我们学习了Android Design Support Library库中的 是个简单的组件,不了解的童鞋可以参考之前的博客 Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用. 这篇博客我们继续学习Design库中的其他四个组件,分别是

【转】Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用

Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16:44 1145人阅读 评论(5) 收藏 举报 MaterialDesingsupportlibrary 目录(?)[-] 前提 FloatingActionButton TextInputLayout Snackbar的使用 TabLayout [转载请注明出处:http://blog.csdn.n

【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI2015-06-17 19:46 1498人阅读 评论(7) 收藏 举报 supportandroidlibrary控件design 目录(?)[-] AppBarLayout CoordinatorLayout CollapsingToolbarLayout NavigationView [转载请