RecyclerView的基本用法
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的基本用法相关推荐
- Android 性能优化lt;九 RecyclerView替代Listview用法
Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...
- RecyclerView的高级用法——定制动画
相信大家都对RecyclerView的用法相当熟悉了,RecyclerView的出现给我们开发者提供了一个高扩展的控件,不管是列表.网格.瀑布流,一个控件就可以搞定,而且神奇的是只需要修改一行代码,就 ...
- 【RecyclerView】 一、RecyclerView 最基本用法 ( 添加支持库 | 设置布局文件 | 自定义适配器 )
文章目录 一.添加支持库 二.布局文件中使用 RecyclerView 三.自定义适配器 四.RecyclerView 设置流程 五.RecyclerView 完整 Java 代码示例 一.添加支持库 ...
- RecyclerView的使用(1)之HelloWorld
原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50670657 RecyclerView是伴随Android 5.0公布的新控件, ...
- Android: ListView 和 RecyclerView 对比(一)
1.ListView 由于手机屏幕空间有限,能够一次性在屏幕上显示的内容并不多,当程序中有大量的数据需要展示的时候,就可以借助 ListView 来实现.ListView 允许用户通过手指上下滑动的方 ...
- 【RecyclerView】 五、RecyclerView 布局 ( 瀑布流 | 交错网格局管理器 StaggeredGridLayoutManager )
文章目录 一.交错网格局管理器 StaggeredGridLayoutManager ( 瀑布流 ) 二.交错网格局管理器默认设置 三.交错网格局管理器水平方向设置 四.完整代码示例 五.Recycl ...
- 【RecyclerView】 四、RecyclerView 布局 ( 网格局管理器 GridLayoutManager )
文章目录 一.网格局管理器 GridLayoutManager 二.网格局管理器默认设置 三.网格局管理器水平方向设置 四.完整代码示例 五.RecyclerView 相关资料 本篇博客主要讨论设置不 ...
- 【RecyclerView】 三、RecyclerView 布局 ( 线性布局管理器 LinearLayoutManager )
文章目录 一.线性布局 1.线性布局管理器 LinearLayoutManager 2.垂直不翻转代码示例 3.水平翻转代码示例 二.完整代码示例 三.RecyclerView 相关资料 本篇博客主要 ...
- RecyclerView点击事件监听
通过一个demo记录recyclerview的基础用法,包括设置item间距,adapter内监听点击和接口回调监听. MyAdapter package com.example.kw.recycle ...
最新文章
- SAP RETAIL 为门店维护多个存储地点
- java中两个整形相除,向上取整
- ref out 的使用
- HTML5+PhoneGap相机拍照
- [笔记] systemverilog学习笔录
- SAP Spartacus B2B Org Unit树状结构的加载机制
- 利用Maven逆向工程生成mybatis映射文件
- python拖拽获取文件路径_求助tkinter模块如何获取拖拽文件的内容
- 「轻阅读」如何设计全链路99.99%高可用架构?
- PHP后端美化,基于Thinkphp5.5表白墙源码,已美化后端
- spring cloud alibaba全家桶集合
- fatal: unable to access ...: LibreSSL SSL_connnect: Connection reset by peer in connect to... :443
- 让C程序跳转到绝对地址0x100000处执行
- 搞个大点的 某团购App mtgsig
- Python之条件竞争
- 手把手教大家搭建微信公众号查题功能
- 怎么在HTML中加入热区,关于网页点击热区图
- Java线程池几个参数的理解
- k8s集群Deployment与Service+名称空间
- 我的物联网项目(三十一) 分销模式电商平台
热门文章
- linux防火墙常用控制协议,linux防火墙配置及管理.doc
- 两个组件连线_如何正确的使用日志组件 Log4j、SLF4J、Logback
- css中图片整合的使用,CSS Sprites:图片整合技术详细案例
- 简述计算机配件选购原则,计算机专业理论期末考试试题
- 怎样用计算机进入手机驱动程序,手机驱动怎么安装?
- java panel 显示文字,从动态添加的jPanel获取文本
- IC基础知识(1)集成电路(IC)简介
- HDLBits 系列(42)根据仿真波形来设计电路之时序逻辑
- 【 MATLAB 】ppval 函数介绍(评估分段多项式)
- 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题