Android RecyclerView(一)综合使用综述(Android 5.0 新特性)


RecyclerView是support.v7包中的控件,可以说是ListView和GridView的增强升级版。

RecyclerView可加载列表样式的数据,类似ListView的加载效果,也可以加载九宫格样式(类似GridView效果)或者瀑布流样式数据,也就是说RecyclerView的可扩展性强,所以在使用时,必须要指定其显示的基本样式
        LinearLayoutManager 线性,显示数据格式为列表样式
        GridLayoutManager 九宫格样式
        StaggeredGridLayoutManager 瀑布流样式


1 RecyclerView 基本使用

添加依赖

compile 'com.android.support:recyclerview-v7:25.0.0'
1.1 布局文件中创建使用
<android.support.v7.widget.RecyclerView
    android:id = "@+id/rv_list"android:layout_width = "match_parent"android:layout_height = "match_parent" />
1.2 java代码中加载 设置列表模式
1.2.1 水平方向滑动

//加载RecyclerView
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {list.add("智慧安卓 -- "+i);
}
//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getApplicationContext());
//设置
contentRecyclerView.setLayoutManager(linearLayoutManager);
//设置水平排列
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
contentRecyclerView.setAdapter(recyclerAdapter);
1.2.2 竖直方向滑动

//设置竖直排列
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
1.2.3 ListRecyclerAdapter配制

public class ListRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {private Context mContext;private List<String> mList;public ListRecyclerAdapter(Application application, List<String> list) {mContext = application;mList = list;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view =View.inflate(mContext,R.layout.item,null);return new ListRecyclerViewHolder(view);}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {}@Overridepublic int getItemCount() {return mList.size();}private static class  ListRecyclerViewHolder extends RecyclerView.ViewHolder{public ListRecyclerViewHolder(View itemView) {super(itemView);}}
}
1.3 java代码中加载 设置九宫格模式
1.3.1 竖直方向滑动

//加载RecyclerView
RecyclerView contentRecyclerView = (RecyclerView) findViewById(R.id.rv_list);
//初始化数据
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {list.add("智慧安卓 -- "+i);
}//初始化Adapter
ListRecyclerAdapter recyclerAdapter = new ListRecyclerAdapter(this.getApplication(),list);
//初始化排列布局
//参数一 上下文对象
//参数二 列数
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getApplicationContext(),3);
//设置
contentRecyclerView.setLayoutManager(gridLayoutManager);
//设置水平排列
gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//设置adapter
contentRecyclerView.setAdapter(recyclerAdapter);
1.3.2 横向滑动

//设置竖直排列
gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
1.3.3 ListRecyclerAdapter配制

如 1.2.3 中所写Adapter


1.5 java代码中加载 设置瀑布流模式

在这里使用到的条目布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayout
        android:id="@+id/ll_root_view"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="1dp"android:background="#fff"android:orientation="vertical"><TextView
            android:id="@+id/tv_item_text"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#5659fa"android:gravity="center"android:text="测试数据" /></RelativeLayout></RelativeLayout>
1.5.1 上下方向滑动

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_list);
//设置布局模式为 竖直方向
//参数一 显示内容为两列
//参数二 子条目排列方式为 水平方式
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
// 设置布局模式
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//初始化Adapter
WaterFallRecyclerAdapter recyclerAdapter = new WaterFallRecyclerAdapter(this.getApplication(),list);
//设置Adapter
recyclerView.setAdapter(recyclerAdapter);

需要注意的是,在这种效果中,显示的每一个Item的高度都不一样,这需要动态的设置Item的高度,否则不会出现这样的效果


//创建适配器 Adapter 与上述创建方式一致//创建 Holder
private static class CustomViewHolder extends RecyclerView.ViewHolder {public CustomViewHolder (View itemView) {super(itemView);RelativeLayout rootLinearLayout = itemView.findViewById(R.id.ll_root_view);//获取RelativeLayout对应的LayoutParamsRelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) rootLinearLayout.getLayoutParams();if (lp != null) {//重新设置LinearLayout的高度lp.height = (int) (200 + Math.random() * 600);rootLinearLayout.setLayoutParams(lp);}}}
1.5.2 左右方向滑动

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_list);
//设置布局模式为 竖直方向
//参数一 显示内容为两列
//参数二 子条目排列方式为 竖直方式
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);
// 设置布局模式
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//初始化Adapter
WaterFallRecyclerAdapter recyclerAdapter = new WaterFallRecyclerAdapter(this.getApplication(),list);
//设置Adapter
recyclerView.setAdapter(recyclerAdapter);

需要注意的是,在这种效果中,显示的每一个Item的宽度都不一样,这需要动态的设置Item的宽度,否则不会出现这样的效果

RecyclerView(一)综合使用综述(Android 5.0 新特性)相关推荐

  1. Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性)

    Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性) 1 效果 2 BaseHolder的封装 public class BaseViewH ...

  2. RecyclerView(四)设置分割线样式(Android 5.0 新特性)

    Android RecyclerView(四)设置分割线样式(Android 5.0 新特性) 样式一 在这里,其实是设置了每一个 条目布局中的子布局的android:layout_margin = ...

  3. RecyclerView(三)实现聊天窗口样式(Android 5.0 新特性)

    Android RecyclerView(三)实现聊天窗口样式(Android 5.0 新特性) 效果 1 聊天窗口子视图布局文件 1.1 左边消息视图布局文件 使用到的背景图片 <?xml v ...

  4. Android 4.0新特性(中文)

    Android 4.0新特性(中文) 转自http://www.eoeandroid.com/thread-103300-1-1.html android4.0 SDK发布有一段时间了,在eoe上找到 ...

  5. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

    Android 5.0新特性有哪些?经过一段时间曝光与测试后,期待已久的Android L系统正式发布了,新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖).Android 5 ...

  6. 安卓9.0发布,献上Android 9.0新特性适配处理

    安卓9.0即Android 9.0已经面向全球发布,它的代号是Pie,仍然基于Linux内核构建.为了避免Android 9.0 Pie新特性更新引发的适配问题,本文将介绍Android 9.0将带来 ...

  7. 开发者必看|Android 8.0 新特性及开发指南

    背景介绍 谷歌2017I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Androi ...

  8. Android 6.0新特性

    注:本文是从谷歌官网翻译过来的,放这里便于查阅和消化理解,更多详细知识点请自备梯子访问官网~ Android 6.0(API 级别 23)除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种 ...

  9. android 4.0新特性总结

    Social APIs in Contacts Provider User Profile 最新的android包含了一个机主的个人档案,在 ContactsContract.Profile表里,通过 ...

最新文章

  1. asp.net中jQuery $post用法
  2. 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
  3. [转]cocos2d游戏开发,常用工具集合
  4. flume 中的 hdfs sink round 和roll
  5. allegro标注尺寸设置_标注新升级 | SOLIDWORKS 2020新功能揭秘
  6. linux是发展历史,linux发展历史.doc.doc
  7. 电子计算机入门教程,「冯修远」计算机入门0基础教程:Word文档的基本操作
  8. 用c语言找出图片中黄颜色部分,测试:6种玫瑰颜色找出你的恋爱基因,神准!...
  9. Mybatis什么时候用resultMap,什么时候用resultType
  10. 双efi分区同时引导失败修复经验
  11. 《黑马程序员》C++基础入门(一)
  12. 语音端点检测 php,几种语音端点检测方法简介
  13. 2019年,实现 React 动画的 5 种最常用方式
  14. Buffon投针问题
  15. 常见的HTTP Headers有哪些?
  16. java 二进制 2个字节 高位 低位_高位字节、低位字节
  17. Python基础语法笔记
  18. 计算机配件声卡,DIY组装电脑到底需要哪些配件 攒机网卡声卡之类的要买吗
  19. element UI 表单自定义验证,css水平且垂直居中方法
  20. Ollydbg手动脱壳得几点小结

热门文章

  1. 内卷加速 | 本科毕业出国率下降,考研or保研?
  2. 干货!639页《深度学习:Deep Learning》硬核课程PPT
  3. 【OpenCV】OpenCV函数精讲之 -- 教你如何使用离散傅里叶变换
  4. 大数据分析必须要会的数据预处理操作(二)!!!
  5. linux 线程的运行时间吗,Linux下巧用ps得到运行线程个数和线程启动时间
  6. 复练-软考高级-论文写作专题
  7. webpack打包原理_对于webpack打包原理你知道有多少?
  8. @scheduled注解配置时间_@Scheduled注解
  9. java编码技巧_编码小技巧 让java编程更便捷
  10. Webstorm React Nodejs 整合