传智·没羽箭(传智播客北京校区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. CS224d lecture 9札记

    欢迎转载.转载注明出处: http://blog.csdn.net/neighborhoodguo/article/details/47193885 近期几课的内容不是非常难.还有我的理解能力有所提高 ...

  2. java.util.ConcurrentModificationException 异常解决的方法及原理

    近期在修程序的bug,发现后台抛出下面异常: Exception in thread "main" java.util.ConcurrentModificationExceptio ...

  3. hdu5372 Segment Game

    Problem Description Lillian is a clever girl so that she has lots of fans and often receives gifts f ...

  4. Eclipse中JDK的配置

    window -> preference -> java -> install jres -> add -> standard vm -> 设置好相应的jre ho ...

  5. WinRAR 5.21 去弹窗 疑惑

    WinRAR 突然就有弹窗广告了 ,找了个方法,重新写一下安装目录下的 rarreg.key,确实有效果但是重写的和之前的完全一样啊,至少在文本中完全一样,怎么回事. 下面附上两个文件, 1.key ...

  6. iframe自适应高度解决方法 .

    <div id="leftBar"> <iframe name="tag" src="_iframe.html" styl ...

  7. HDU——T 3746 Cyclic Nacklace

    http://acm.hdu.edu.cn/showproblem.php?pid=3746 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  8. [ES6] Extends class in ES6 vs ES5 subclass

    ES6 class with extends and super: class Tree { constructor(size = ', leaves = {spring: 'green', summ ...

  9. [Javascript AST] 4. Continue: Report ESLint error

    const disallowedMethods = ["log", "info", "warn", "error", & ...

  10. HDU 4869 Turn the pokers(思维+组合公式+高速幂)

    pid=4869" target="_blank">Turn the pokers 大意:给出n次操作,给出m个扑克.然后给出n个操作的个数a[i],每一个a[i] ...