RecyclerView是Android 5.0的新特性,可以直接代替ListView与GridView,并且能够实现瀑布流的布局,感觉RecyclerView使用的好处就是它不关心布局,只关心资源的回收与复用,正因为如此,RecyclerView中将ViewHolder进行了单独的编写,这也正是google所不断提倡的,另外,RecyclerView能够更简单的实现布局的转换。

RecyclerView简介

  Google I/0大会上Google开放了一个全新的视图类RecyclerView,它被用来代替ListView以及GridView,提供更为高效的回收复用机制,同时实现管理与视图的解耦合。
1、RecyclerView不关心布局,需要使用setLayoutManager进行设置布局。
2、RecyclerView不关心分割线,因此分割线需要我们自己想办法设置。
3、RecyclerView不关心Item的点击事件与动画效果,需要自己编写接口进行监听。
4、RecyclerView仅关注View的回收与复用。
相关的类:

RecyclerView.Adapter:托管数据集合,为每个Item创建视图;
RecyclerView.ViewHolder:承载Item视图的子视图;
RecyclerView.LayoutManager:负责Item视图的布局;
RecyclerView.ItemDecoration:为每个Item视图添加分割线;
RecyclerView.ItemAnimator:负责添加、删除数据时的动画效果;

RecyclerView转ListView

根据上面的介绍可以知道要使用RecyclerView我们至少要用到LayoutManager,Adapter,ViewHolder。

垂直的Linearlayout 布局

MainActivity:(在MainActivity中需要用到Adapter与LayoutManager,因此在后面我们需要对他们进行编写)

public class MainActivity extends AppCompatActivity {private RecyclerView  mRecyclerview;private List<Fruit> mData=new ArrayList<>();private RecyclerAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mRecyclerview= (RecyclerView) findViewById(R.id.recyclerview);//垂直的Linearlayout   LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);initedata();mAdapter=new RecyclerAdapter(getApplicationContext(),getLayoutInflater(),mData);mRecyclerview.setAdapter(mAdapter);//设置布局mRecyclerview.setLayoutManager(manager);}private void initedata(){for(int i=0;i<5;i++){Fruit fruit=new Fruit("苹果",R.mipmap.apple);Fruit fruit1=new Fruit("梨",R.mipmap.pear);Fruit fruit2=new Fruit("香蕉",R.mipmap.banana);Fruit fruit3=new Fruit("草莓",R.mipmap.strawberry);Fruit fruit4=new Fruit("橙子",R.mipmap.orenge);mData.add(fruit);mData.add(fruit1);mData.add(fruit2);mData.add(fruit3);mData.add(fruit4);}}}

Adapter

Adapter方面注意继承的是RecyclerView.Adapter ,内部传递一个ViewHolder

public class RecyclerAdapter extends RecyclerView.Adapter<MyViewHolder> {private LayoutInflater mInflate;private Context mContext;private List<Fruit> mData;public RecyclerAdapter(Context context, LayoutInflater mInflate, List<Fruit> mData) {this.mContext=context;this.mInflate = mInflate;this.mData = mData;}/**** @param viewGroup 父布局 RecyclerView* @param i 相当于position* @return ViewHolder*/@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {View view=mInflate.inflate(R.layout.item_recylerview,viewGroup,false);MyViewHolder myViewHolder=new MyViewHolder(view);return myViewHolder;}@Overridepublic void onBindViewHolder(MyViewHolder myViewHolder, int position   ) {myViewHolder.tv.setText(mData.get(position).getName());myViewHolder.mImageview.setImageResource(mData.get(position).getImg());}@Overridepublic int getItemCount() {return mData.size();}
}/*** MyViewHolder中获得子布局中的view*/
class MyViewHolder extends RecyclerView.ViewHolder{TextView tv;ImageView mImageview;public MyViewHolder(View itemView) {super(itemView);tv= (TextView) itemView                                                       .findViewById(R.id.tv);mImageview= (ImageView) itemView.findViewById(R.id.image);}
}

布局:

注意使用的是<android.support.v7.widget.RecyclerView
为RecyclerView设置蓝色背景

<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"tools:context=".MainActivity"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerview"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#0000ff"></android.support.v7.widget.RecyclerView></RelativeLayout>

ItemView布局

为子布局添加绿色背景

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:background="#00ff00">
<ImageView
    android:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/ic_launcher"/><TextView
        android:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_gravity="center_vertical"android:text="这是一个水果"/>
</LinearLayout>

水平的Linearlayout 布局

LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);将原来的LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); 替换成水平的

  

RecyclerView转GridView

只需要在Linearlayout 的基础上修改LayoutManager即可,注意GridLayoutManager内的第二个参数是列数。

 mRecyclerview.setLayoutManager(new GridLayoutManager(this,2));

代码补充Fruit类

get/set+构造器

public class Fruit {private String name;private int img;public Fruit(String name, int img) {this.name = name;this.img = img;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}
}

Android RecyclerView之代替ListView与GridView相关推荐

  1. android中ScrollView嵌套ListView或GridView显示位置问题

    Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...

  2. Android RecyclerView 基本使用

    Android RecyclerView 基本使用 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用. 据官方的介绍,该控件用 ...

  3. Android RecyclerView (一) 使用完全解析

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45059587: 本文出自:[张鸿洋的博客] 概述 RecyclerView出现 ...

  4. 13.ListView和GridView

    转载请标明出处:  http://blog.csdn.net/yujun411522/article/details/46226001 本文出自:[yujun411522的博客] android组件中 ...

  5. android gridview滑动卡,Android RecyclerView的卡顿问题

    本文其实是上一篇Android本地app操作相关基础的延伸,然而内容基本没什么联系了(初学者身份瞬间暴露,打一枪换一个地方←_←),就不好意思再添个"续"或者"(2)&q ...

  6. 详解RecyclerView替换ListView和GridView及实现暴瀑流

    前言 在Android中有了ListView,GridView,为什么还需要RecyclerView这样的控件呢?从整体上看,RecyclerView架构提供了一种插拔式体验,它具有高度的解耦,异常的 ...

  7. Android中RecyclerView嵌套RecyclerView或嵌套ListView

    Android中RecyclerView嵌套RecyclerView或嵌套ListView

  8. android listView嵌套gridview的使用心得

    在开发的过程中可能需要用到listview嵌套gridview的场景,但是在Android中, 不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动 ...

  9. Android SimpleAdapter显示ListView、GridView

    SimpleAdapter作为一个数据集,主要向ListView.GridView容器填充数据,总结了几种填充方式,原理很简单,直接看代码和效果图 1. ListView单行显示(simple_lis ...

最新文章

  1. 网红“AI大佬”被爆论文剽窃,Jeff Dean都看不下去了
  2. 选择合适的CMS搭建网站
  3. 找不到暑期实习怎么办?
  4. android 跳转到小米手机神隐模式
  5. 从Windows计算机上完全删除iTunes和其他Apple软件
  6. Jimu : .Net Core 分布式微服务框架介绍
  7. Linux网络编程---I/O复用模型之select
  8. [论文阅读] Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet
  9. MIT6.006Lec03:插入排序,归并排序,递归树
  10. memcached mysql 类_mysql有没有类似和memcached里那样的CAS版本控制?
  11. 【游戏开发解答】Unity发布微信小游戏,中文字无法显示的问题(自制字体库 | Font | Custom set | 动态字体 | 静态字体)
  12. typedef 定义结构体说明
  13. Python爬虫-bug处理办法(持续更新)
  14. ue4 Sequencer笔记
  15. 一个IT男的500强生涯
  16. 副业案例一:变现100万美元的国外网课销售漏斗模型案例
  17. 学习Java,是看书好还是看视频?
  18. wps云文档本地服务器,wps云文档会存到本地?
  19. 在 R 中计算 MSE
  20. win10改计算机用户名,简单几步解决win10电脑用户名改不了的问题

热门文章

  1. Mycat--介绍/官网等
  2. 怎么理解数据网格(Data Mesh)
  3. Centos7安装部署免费confluence wiki
  4. [转载]点评阿里云、盛大云等国内IaaS产业
  5. 用华秋DFM作为PCB Viewer
  6. matlab实现图像读取、写入和显示
  7. 基于ubuntu环境搭建janus服务器
  8. 疑难杂症篇(十)--Catia软件出现“没有合适的许可证来实现xx的请求”解决方案
  9. UDDi注册中心的实现
  10. 千寻位置终端配置参数说明