传智·没羽箭(传智播客北京校区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的布局非常easy,仅仅有一个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。

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

  1. Android L新控件RecyclerView简介

    Android L是android进化史上的里程碑,尽管还没有正式发布4.5或者5.0,但预览版也同样精彩. 这篇文章只是另外一篇博客的总结性翻译,能够读懂原文的,可以点开这个链接去阅读精彩的原文:h ...

  2. android L新控件RecyclerView详解与DeMo[转]

    http://blog.csdn.net/codebob/article/details/37813801 在谷歌的官网我们可以看到它是这样介绍的: RecyclerView  is a more a ...

  3. android L新控件RecyclerView具体解释DeMo

    简介 在谷歌的官方网站上,我们可以看到,它是此演示文稿:RecyclerView is a more advanced and flexible version of ListView. This w ...

  4. Android5.0新控件RecyclerVIew的介绍和兼容使用的方法

    第一部分 RecyclerVIew是一个可以替代listview和Gallery的有效空间而且在support-v7中有了低版本支持,具体使用方式还是规规矩矩的适配器加控件模式.我们先来看看官网的介绍 ...

  5. Android控件RecyclerView与ListView的异同

    在我的一篇介绍Android新控件RecyclerView的博客(Android L新控件RecyclerView简介)中,一个读者留言说RecyclerView跟ListView之间好像没有什么不同 ...

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

    Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI ...

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

    Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用 分类: Android UI2015-06-15 16: ...

  8. android design 新控件

    转载请标明出处: http://blog.csdn.net/forezp/article/details/51873137 本文出自方志朋的博客 最近在研究android 开发的新控件,包括drawe ...

  9. 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习

    Android5.0+推出的新控件感觉特别酷,最近想模仿大神做个看图App出来,所以先把这些新控件用熟悉了. 新控件的介绍.使用等等网上相应的文章已经特别多了,题主也没那能力去写篇详解出来,本篇随笔记 ...

随机推荐

  1. java架构解密——实时动态aop

    在上篇博客中个.咱们一起组建了一个容器,里面封装了业务,这样,咱们就将业务和服务的组装放到了client,而client就相当于咱们的开发中使用到的配置文件.大家发现问题了吗?就是我不能动态修改了?业 ...

  2. jquery12 queue() : 队列方法

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 圆形头像CircleImageView和Cardview使用

    效果: 圆形头像在我们的日常使用的app中很常见,因为圆形的头像比较美观. 使用圆形图片的方法可能有我们直接将图片裁剪成圆形再在app中使用, 还有就是使用自定义View对我们设置的任何图片自动裁剪成 ...

  4. 58.express安装问题:express不是内部也或者外部的命令解决方案

    转自:https://www.cnblogs.com/zhangym118/p/5842094.html "Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列 ...

  5. Atcoder AGC 019 A,B

    A - Ice Tea Store Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement You' ...

  6. JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包. 二.使用C3P0配 ...

  7. Mahout应用

    不多说,直接上干货! Mahout作为Apache基金会的顶级项目之一,Mahout的应用也极其广泛,一般分为商业应用和学术应用. 在商业应用中,Adobe AMP公司使用Mahout的聚类算法把用户 ...

  8. 洛谷P1043 数字游戏

    题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...

  9. JavaScript--数据结构之栈

    4.1栈是一种高效的数据结构,是一种特殊的列表.栈内元素只能通过列表的一端访问,也就称为栈顶.后入的先出的操作.Last in First out.所以他的访问每次是访问到栈顶的元素,要想访问其余的元 ...

  10. 快速傅里叶变换FFT(模板)

    好不容易闲下来总结一下FFT.QAQ 1.DFT: 对于多项式的乘法,DFT给了我们新的思路(点值表达式的O(n)相乘) 对于我们习惯的多项式算法例如多项式A(x)=5x+1和B(x)=2x+2 C( ...