灵活性比Listview更好的RecycleView
RecycleView:
是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。
RecyclerView与ListView原理是类似的:
都是仅仅维护少量的View并且可以展示大量的数据集。
RecyclerView:
1、item的排列方式:两种布局管理器:
- LinearLayoutManager
- GridLayoutManager
2、操作item的时候提供默认的动画效果
3、item多种布局比较方便
4、封装了item的优化
5、适配器不同
不同点:
1、分割线,RecyclerView要自定义设置
2、监听器,RecyclerView没有条目监听器,需要在适配器中自定义
RecyclerView用以下两种方式简化了数据的展示和处理:
使用LayoutManager来确定每一个item的排列方式
为增加和删除项目提供默认的动画效果
也可以定义自己的LayoutManager和添加删除动画
使用RecycleView步骤:
一、添加依赖
//材料设计包
compile 'com.android.support:design:23.4.0'
//cardview包裹item布局,美化效果
compile 'com.android.support:cardview-v7:23.4.0'
//下拉刷新包裹RecyclerView布局
compile 'in.srain.cube:ultra-ptr:1.0.11'
二、相关方法
//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
recyclerView.setHasFixedSize(true);
//设置item布局之间的分割线,三个选择
recyclerView_main.addItemDecoration(new DividerGridItemDecoration(mContext))
//设置布局管理器
recyclerView.setLayoutManager(LinearLayoutManager、GridLayoutManager)
//设置动画效果
recyclerView.setItemAnimator(new DefaultItemAnimator());
//设置适配器
recyclerView.setAdapter(adapter);
//上拉加载下一页
recyclerView_main.addOnScrollListener(//两个方法:
线性布局管理器得到最后一条item的position;判断,然后页码++)
//置顶功能
recyclerView.scrollToPosition(0);
三、实现下拉刷新:
1、SwipeRefreshLayout:(系统自带的,只是下拉的时候布局并没有被下拉,需要自定义)
//包裹RecyclerView布局
//渐变颜色
swipeRefreshLayout.setColorSchemeColors(...)
//监听刷新
swipeRefreshLayout.setOnRefreshListener(//curPage = 1;loadNetworkData();)
//加载完成,消失图标
swipeRefreshLayout.setRefreshing(false);
2、第三方类库:library_pullToReflect
//布局:PullToRefreshRecyclerView
//用法和RecycleView类似
//如设置布局管理器、设置分割线或者分割空间、set item的高度是固定的
//addOnScrollListener(//几乎很RecycleView一样,下拉刷新)
3、PtrFrameLayout:(需要导包,依赖项)
//布局:PtrFrameLayout包裹RecyclerView
//有两种:
①、旋转圆圈的header(类似SwipeRefreshLayout)
Ⅰ、new一个StoreHouseHeader header,然后设置:
header.setBackgroundColor
header.setTextColor
header.initWithString("LOADING...")
Ⅱ、添加header,ptrFrameLayout.setHeaderView(header);
Ⅲ、绑定UI与刷新状态的监听:ptrFrameLayout.addPtrUIHandler(header);
Ⅳ、添加刷新动作监听:ptrFrameLayout.setPtrHandler(new PtrDefaultHandler)
②、默认的经典header(类似pullTorefresh效果)
Ⅰ 、new一个PtrClassicDefaultHeader
Ⅱ、添加header,ptrFrameLayout.setHeaderView(header);
Ⅲ、绑定UI与刷新状态的监听:ptrFrameLayout.addPtrUIHandler(header);
Ⅳ、添加刷新动作监听:ptrFrameLayout.setPtrHandler(new PtrDefaultHandler)
// 刷新完成,让刷新Loading消失
ptrFrameLayout_main.refreshComplete();
四、RecyclerView的适配器
Ⅰ 、自定义适配器继承 RecyclerView.Adapter<RecyclerView.ViewHolder>
导包正确的化可以简写成Adapter<ViewHolder>
Ⅱ、声明属性,Context 、 数据源 、 LayoutInflater
构造器初始化
Ⅲ、重写方法:
onCreateViewHolder(parent , typeView):填充View,并返回new ViewHolder(view)
onBindViewHolder(holder , position);赋值,并加载图片
getItemId(position)
Ⅳ、ViewHolder内部类 继承 RecyclerView.ViewHolder
声明UI控件,构造器初始化
Ⅴ、重新加载数据:reloadListView(数据源 、 isClear)
Ⅵ、额外的方法:
notifyDataSetChanged()
notifyItemInserted(position)
notifyItemRangeInserted(positionStart, itemCount)
notifyItemRemoved(position)
notifyItemChanged(position)
Ⅶ、如果需要设置单击监听、长按监听
1、interface OnItemClickedListener:两个抽象方法
void onItemClick(int position)
boolean onItemLongClick(int position)
2、声明接口对象:listener、声明RecyclerView对象,并在构造器中传入RecyclerView对象
3、setOnItemClickedListener(接口对象){this.listener = listener}
4、ViewHolder要实现View的单击、长按监听器
5、重写单击监听器
if (listener != null) {
int position = recyclerView.getChildPosition(v)
listener.onItemClick(position)
}
长按监听器:
if (listener != null) {
int position = recyclerView.getChildPosition(v)
return listener.onItemLongClick(position)
}
return false
6、主页就可以调用setOnItemClickedListener(new ...)
附CardView:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:elevation="5dp"
app:cardCornerRadius="10dp">
</android.support.v7.widget.CardView>
灵活性比Listview更好的RecycleView的更多相关文章
- graphicview和widgets没本质区别。它只是更轻量级,更灵活,性能更高的widgets
graphicview和widgets没本质区别.它只是更轻量级,更灵活,性能更高的widgets.核心就是把widgets变成了更轻量级的graphicitem,把QWidget的各种事件转换成了g ...
- Android 比ListView更好用强大的RecyclerView库:RecyclerViewLibrary
RecyclerViewLibrary A RecyclerView libirary ,has some support, like headerAdapter/TreeAdapter,and Pu ...
- Android开发之recycleView详解代码,看完包你熟练掌握recycleView的用法。转自网络经典文章
来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在 ...
- Android 高级编程 RecyclerView 控件的使用
RecyclerView 是Android 新添加的一个用来取代ListView的控件,它的灵活性与可替代性比listview更好. 看一下继承关系: ava.lang.Object ↳ and ...
- Introducing RecyclerView(一)
RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好.接下来通过一系列的文章讲解如何使用RecyclerView ...
- RecyclerView使用介绍
来源 http://jinyudong.com/2014/11/13/Introduce-RecyclerView-%E4%B8%80/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在 ...
- delphi if 语句循环语句
if语句------------------------------------------------------------------------------------------------ ...
- Android RecyclerView使用 及 滑动时加载图片优化方案
1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...
- flutter、rn、uni-app比较
前言 每当我们评估新技术时要问的第一个问题就是“它会给我们的业务和客户带来哪些价值?”,工程师们很容易对闪闪发光的新事物着迷,却经常会忽略这些新事物其实可能对我们的客户没有任何好处,反而只会让现有的工 ...
随机推荐
- 重新开始学习javase_多态(动态绑定、推迟绑定或者运行期绑定)
一,谈向上转换,或者上溯造型 什么是向上转换(上溯造型),一句话就是父类的引用指向子类的对象.或者把子类的对象当作父类来用 为什么要进行向上转换?我们先看一个例子吧! @Test public voi ...
- Java基础--IO
1,流的认识和分类 2,Java种处理流的IO类架构 3,字节流和字符流转换 4,NIO的概述 5,Java IO关闭资源 1,流的认识和分类 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的 ...
- CentOS 6.5下安装MySql 5.7
不管您按下面的方法安装成功否,请留个言,把您遇到的问题写上共勉! 包下载http://url.cn/WrNg5S 环境: 1).软硬件:E6420双核CPU,8G内存,1T硬盘 2).虚拟机下 Cen ...
- cal命令详解与练习
cal: 显示日历. 命令格式: cal [-smjy13] [[[day] month] year] 参数说明 -1 显示当前月日历 -3 显示当前月前后3月的日历 -s 以星期天为第一天显示 -m ...
- 【行为型】Memento模式
备忘录模式顾名思义就是一种能有备忘作用的设计模式,其目的是在对象外部保存其在某一时刻的状态信息,并且在任何需要的时候,都可以通过备忘录中保存的状态数据恢复对象在当时情形下的状态. 备忘录模式旨在对象的 ...
- python Template中substitute()的使用
在python中Template可以将字符串的格式固定下来,重复利用. Template属于string中的一个类,要使用他的话可以用以下方式调用: from string import Templa ...
- ExtJS5_自定义菜单1
顶部和底部区域已经作好,在顶部区域有一个菜单的按钮,这一节我们设计一个菜单的数据结构,使其可以展示出不同样式的菜单.由于准备搭建的是一个系统模块自定义的系统,因此菜单也是自定义的,在操作员系统登录的时 ...
- STM32库中 __IO 修饰符(volatile修饰符)
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原 ...
- 打印机PCL漏洞原理分析
0x01 漏洞概要 PCL代表打印机控制语言(Printer Control Language),由惠普公司开发,并被广泛使用的一种打印机协议.关于另一种页面描述语言,应该提一提由Adobe设计的Po ...
- Node.js模块 加载笔记
//核心模块就是Node.js标准API种提供的模块,如fs,http,net.vm等.官方提供,编译成二进制代码//核心模块拥有最高的加载优先级 //文件模块则是存储为单独的文件(或文件夹)的模块, ...