RecyclerView 是一个增强版的ListView,不仅可以实现和ListView同样的效果,还优化了ListView中存在的各种不足之处ResyslerView 能够实现横向滚动,这是ListView所不能实现的目前官方更加推荐使用RecyclerView.1.实现垂直方向的滚动在   dependencies 中添加库的引用[html] view plain copydependencies {  compile fileTree(dir: 'libs', include: ['*.jar'])  testCompile 'junit:junit:4.12'  compile 'com.android.support:appcompat-v7:24.2.0'  compile 'com.android.support:recyclerview-v7:24.2.1'  }  添加布局文件:[html] view plain copy<?xml version="1.0" encoding="utf-8"?>  <LinearLayout  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/recycler_view"  android:layout_width="match_parent"  android:layout_height="match_parent">  </android.support.v7.widget.RecyclerView>  </LinearLayout>  创建RecyclerView 适配器 BookBaseAdapter ,这个类继承 RecyclerView.Adapter 并将泛型指定为 BookBaseAdapter.ViewHolder其中ViewHolder是我们在 BookBaseAdapter 中定义的一个内部类:代码如下:[html] view plain copypublic class BookBaseAdapter extends RecyclerView.Adapter<BookBaseAdapter.ViewHolder>{  private List<Book> mBookList;  static class ViewHolder extends RecyclerView.ViewHolder{  ImageView bookImage;  TextView bookname;  public ViewHolder(View view) {  super(view);  bookImage = (ImageView) view.findViewById(R.id.book_iamge);  bookname = (TextView) view.findViewById(R.id.book_name);  }  }  public BookBaseAdapter(List<Book> mBookList) {  this.mBookList = mBookList;  }  [html] view plain copy<span style="white-space:pre;"> </span>//加载item 的布局  创建ViewHolder实例
        @Override  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.book,parent,false);  ViewHolder holder = new ViewHolder(view);  return holder;  }  [html] view plain copy<span style="white-space:pre;"> </span>//对RecyclerView子项数据进行赋值
        @Override  public void onBindViewHolder(ViewHolder holder, int position) {  Book book = mBookList.get(position);  holder.bookname.setText(book.getName());  holder.bookImage.setImageResource(book.getImageId());  }  [html] view plain copy<span style="white-space:pre;"> </span>//返回子项个数
        @Override  public int getItemCount() {  return mBookList.size();  }  }  MainActivity调用:
[html] view plain copypublic class MainActivity extends AppCompatActivity {  private List<Book> mlsit = new ArrayList<Book>();  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  //初始化List数据
            initBook();  //初始化RecyclerView  RecyclerView recyslerview = (RecyclerView) findViewById(R.id.recycler_view);  //创建LinearLayoutManager 对象 这里使用 <span style="font-family:'Source Code Pro';">LinearLayoutManager 是线性布局的意思</span>  LinearLayoutManager layoutmanager = new LinearLayoutManager(this);  //设置RecyclerView 布局
            recyslerview.setLayoutManager(layoutmanager);  //设置Adapter  BookBaseAdapter adapter = new BookBaseAdapter(mlsit);  recyslerview.setAdapter(adapter);  }  private void initBook(){  for (int i = 0; i < 10; i++) {  Book book01 = new Book("Book"+i,R.drawable.icon01);  mlsit.add(book01);  Book book02 = new Book("Book"+i,R.drawable.icon02);  mlsit.add(book02);  Book book03 = new Book("Book"+i,R.drawable.icon03);  mlsit.add(book03);  }  }  }  main_layout布局:
[html] view plain copy<?xml version="1.0" encoding="utf-8"?>  <LinearLayout  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/recycler_view"  android:layout_width="match_parent"  android:layout_height="match_parent">  </android.support.v7.widget.RecyclerView>  </LinearLayout>  item布局:
[html] view plain copy<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="horizontal">  <ImageView  android:id="@+id/book_iamge"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/>  <TextView  android:id="@+id/book_name"  android:layout_width="match_parent"  android:layout_height="wrap_content"/>  </LinearLayout>  此处省略Book对象的相关源码。如上就可以实现和ListView一样的效果。2.实现横向滚动对垂直布局中的代码做小修改:onCreat方法中添加setOrientation()方法来设置布局的排列方向[html] view plain copy<span style="background-color:rgb(255,255,255);"> <span>    </span>layoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL);</span>  [html] view plain copy@Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  //初始化List数据
        initBook();  //初始化RecyclerView  RecyclerView recyslerview = (RecyclerView) findViewById(R.id.recycler_view);  //创建LinearLayoutManager 对象  LinearLayoutManager layoutmanager = new LinearLayoutManager(this);  layoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL);  //设置RecyclerView 布局
        recyslerview.setLayoutManager(layoutmanager);  //设置Adapter  BookBaseAdapter adapter = new BookBaseAdapter(mlsit);  recyslerview.setAdapter(adapter);  }  修改一下item的布局:[html] view plain copy<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="150dp"  android:layout_height="wrap_content"  android:orientation="vertical">  <ImageView  android:id="@+id/book_iamge"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center_horizontal"/>  <TextView  android:id="@+id/book_name"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_marginTop="10dp"  android:layout_gravity="center_horizontal"/>  </LinearLayout>  运行程序就可以发现我们实现了横向的滚动效果3.瀑布流布局RecyclerView除了LinearLayoutManager 之外,还提供了GridlayoutManager和StaggeredGridlayoutManager这两种内置的布局排列方式GridlayoutManager可以用于实现网格布局StaggeredGridlayoutManager可以用于实现瀑布流布局,这里我们来实现一下炫酷的瀑布流布局:修改item.xml的布局[html] view plain copy<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_margin="5dp"  android:orientation="vertical">  <ImageView  android:id="@+id/book_iamge"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center_horizontal"/>  <TextView  android:id="@+id/book_name"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_marginTop="5dp"  android:layout_gravity="left"/>  </LinearLayout>  onCreat方法:[html] view plain copy@Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  //初始化List数据
        initBook();  //初始化RecyclerView  RecyclerView recyslerview = (RecyclerView) findViewById(R.id.recycler_view);  //创建LinearLayoutManager 对象  /*  * 第一个参数表示布局的列数  * 第二个参数表示布局的方向,这里我们传入StaggeredGridLayoutManager.VERTICAL,表示布局纵向排列  */  StaggeredGridLayoutManager layoutmanager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);  //设置RecyclerView 布局
        recyslerview.setLayoutManager(layoutmanager);  //设置Adapter  BookBaseAdapter adapter = new BookBaseAdapter(mlsit);  recyslerview.setAdapter(adapter);  }  仅仅修改一行代码,就可以成功的实现瀑布流的布局效果点击监听事件这里引用  http://blog.csdn.net/dmk877/article/details/50816933 的方法

给RecyclerView的Item添加点击事件Item的点击事件RecyclerView监听事件处理在ListView使用的时候,该控件给我们提供一个onItemClickListener监听器,这样当我们点击Item的时候,会回调相关的方法,以便我们方便处理Item点击事件。对于RecyclerView来讲,非常可惜的是,该控件没有给我们提供这样的内置监听器方法,不过我们可以进行改造实现,可以这样实现Item的点击事件的监听,在我们的adapter中增加这两个方法
public interface OnItemClickListener{void onClick( int position);void onLongClick( int position);}
public void setOnItemClickListener(OnItemClickListener onItemClickListener ){this. mOnItemClickListener=onItemClickListener;}然后onBindViewHolder方法要做如下更改
[java] view plain copy在CODE上查看代码片派生到我的代码片@Override  public void onBindViewHolder(MyViewHolder holder, final int position) {  holder. tv.setText( mDatas.get(position));  if( mOnItemClickListener!= null){  holder. itemView.setOnClickListener( new OnClickListener() {  @Override  public void onClick(View v) {  mOnItemClickListener.onClick(position);  }  });  holder. itemView.setOnLongClickListener( new OnLongClickListener() {  @Override  public boolean onLongClick(View v) {  mOnItemClickListener.onLongClick(position);  return false;  }  });  }  }<span style="color:#333333;">  </span>  在MainAcitivity中增加
[java] view plain copy在CODE上查看代码片派生到我的代码片recycleAdapter.setOnItemClickListener(new OnItemClickListener() {  @Override  public void onLongClick(int position) {  Toast.makeText(MainActivity.this,"onLongClick事件       您点击了第:"+position+"个Item",0).show();  }  @Override  public void onClick(int position) {  Toast.makeText(MainActivity.this,"onClick事件       您点击了第:"+position+"个Item",0).show();  }  });参考文档:http://blog.csdn.net/dmk877/article/details/50816933

RecyclerView的基本用法相关推荐

  1. Android 性能优化lt;九 RecyclerView替代Listview用法

    Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...

  2. RecyclerView的高级用法——定制动画

    相信大家都对RecyclerView的用法相当熟悉了,RecyclerView的出现给我们开发者提供了一个高扩展的控件,不管是列表.网格.瀑布流,一个控件就可以搞定,而且神奇的是只需要修改一行代码,就 ...

  3. 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 )

    文章目录 一.添加支持库 二.布局文件中使用 RecyclerView 三.自定义适配器 四.RecyclerView 设置流程 五.RecyclerView 完整 Java 代码示例 一.添加支持库 ...

  4. RecyclerView的使用(1)之HelloWorld

    原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50670657 RecyclerView是伴随Android 5.0公布的新控件, ...

  5. Android: ListView 和 RecyclerView 对比(一)

    1.ListView 由于手机屏幕空间有限,能够一次性在屏幕上显示的内容并不多,当程序中有大量的数据需要展示的时候,就可以借助 ListView 来实现.ListView 允许用户通过手指上下滑动的方 ...

  6. 【RecyclerView】 五、RecyclerView 布局 ( 瀑布流 | 交错网格局管理器 StaggeredGridLayoutManager )

    文章目录 一.交错网格局管理器 StaggeredGridLayoutManager ( 瀑布流 ) 二.交错网格局管理器默认设置 三.交错网格局管理器水平方向设置 四.完整代码示例 五.Recycl ...

  7. 【RecyclerView】 四、RecyclerView 布局 ( 网格局管理器 GridLayoutManager )

    文章目录 一.网格局管理器 GridLayoutManager 二.网格局管理器默认设置 三.网格局管理器水平方向设置 四.完整代码示例 五.RecyclerView 相关资料 本篇博客主要讨论设置不 ...

  8. 【RecyclerView】 三、RecyclerView 布局 ( 线性布局管理器 LinearLayoutManager )

    文章目录 一.线性布局 1.线性布局管理器 LinearLayoutManager 2.垂直不翻转代码示例 3.水平翻转代码示例 二.完整代码示例 三.RecyclerView 相关资料 本篇博客主要 ...

  9. RecyclerView点击事件监听

    通过一个demo记录recyclerview的基础用法,包括设置item间距,adapter内监听点击和接口回调监听. MyAdapter package com.example.kw.recycle ...

最新文章

  1. SAP RETAIL 为门店维护多个存储地点
  2. java中两个整形相除,向上取整
  3. ref out 的使用
  4. HTML5+PhoneGap相机拍照
  5. [笔记] systemverilog学习笔录
  6. SAP Spartacus B2B Org Unit树状结构的加载机制
  7. 利用Maven逆向工程生成mybatis映射文件
  8. python拖拽获取文件路径_求助tkinter模块如何获取拖拽文件的内容
  9. 「轻阅读」如何设计全链路99.99%高可用架构?
  10. PHP后端美化,基于Thinkphp5.5表白墙源码,已美化后端
  11. spring cloud alibaba全家桶集合
  12. fatal: unable to access ...: LibreSSL SSL_connnect: Connection reset by peer in connect to... :443
  13. 让C程序跳转到绝对地址0x100000处执行
  14. 搞个大点的 某团购App mtgsig
  15. Python之条件竞争
  16. 手把手教大家搭建微信公众号查题功能
  17. 怎么在HTML中加入热区,关于网页点击热区图
  18. Java线程池几个参数的理解
  19. k8s集群Deployment与Service+名称空间
  20. 我的物联网项目(三十一) 分销模式电商平台

热门文章

  1. linux防火墙常用控制协议,linux防火墙配置及管理.doc
  2. 两个组件连线_如何正确的使用日志组件 Log4j、SLF4J、Logback
  3. css中图片整合的使用,CSS Sprites:图片整合技术详细案例
  4. 简述计算机配件选购原则,计算机专业理论期末考试试题
  5. 怎样用计算机进入手机驱动程序,手机驱动怎么安装?
  6. java panel 显示文字,从动态添加的jPanel获取文本
  7. IC基础知识(1)集成电路(IC)简介
  8. HDLBits 系列(42)根据仿真波形来设计电路之时序逻辑
  9. 【 MATLAB 】ppval 函数介绍(评估分段多项式)
  10. 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题