RecyclerView使用详解(代替ListView)

老规矩,先看效果;

Recycler是android5.0版本中新添加的一个view;
使用之前必须添加依赖库:

dependencies {
 compile 'com.android.support:recyclerview-v7:23.0.+'
}

这里我就不再过多的介绍RecyclerView,既然大家在找使用RecyclerView的demo想必大家都了解过了,如果不了解网上随便打开一篇RecyclerView的文章应该都有,已经烂大街,在此就不过多的重复了;

今天写的demo主要是利用RecyclerView代替普通的listview和横向的listview;
个人感觉要想更深入的使用RecyclerView,必须要从最基础的功能开始实现;今天我们就实现最简单的五点功能:
功能点:为RecyclerView添加点击事件,添加头布局和脚布局,添加下拉刷新和上拉加载更多;

好了首先说下如何用RecyclerView代替横向的listview:
RecyclerView的使用个人感觉其实比较简单,但是网上很多demo介绍的感觉有点复杂,在本文中RecyclerView的基本使用只需两步:

第一:设置布局管理器

第二:设置adapter

//添加布局管理器,Orientation默认是纵向的,所以我们在此需要手动指定一下
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(OrientationHelper.HORIZONTAL);
recyclerView.setLayoutManager(layoutManager); 

//设置recyclerView标记,如果确定内容的高度都一致,设置为true,提高内容渲染效率;(如果高度不确定系统要自己适配高度)
recyclerView.setHasFixedSize(true); 

//设置adapter
HRecyclerViewAdapter adapter = new HRecyclerViewAdapter(context, images);
recyclerView.setAdapter(adapter);

RecyclerVIew提供了三种内置的布局管理器:
LinearLayoutManager:线性布局,横向或者纵向滑动列表
GridLayoutManager:表格布局
StaggeredGridLayoutManager:流式布局
我们今天只使用第一种,先了解最实用,最基础的,后期会更新

RecyclerView默认是没有分割线的,网上很多demo为了给RecyclerView添加分割线使用了系统提供的类;
个人感觉完全没必要,甚至感觉多次一举,个人感觉完全可以给RecyclerView和item设置背景实现分割线或者在item布局中添加view布局实现;

首先了解下RecyclerView的adapter:

和listview的adapter有所不同,在这里需要继承RecyclerView.Adapter,需要实现三个方法:
onCreateViewHolder()
onBindViewHolder()
getItemCount()

详情看代码:

public class HRecyclerViewAdapter extends RecyclerView.Adapter<HRecyclerViewAdapter.MyViewHolder>{ 

 private Context context;
 private int[] images;
 private OnItemClickListener onItemClickListener; 

 public HRecyclerViewAdapter(Context context, int[] images) {
 this.context=context;
 this.images=images;
 } 

 //重写onCreateViewHolder方法,返回一个自定义的ViewHolder(当RecyclerView需要一个ViewHolder时会回调该方法,如果有可复用的View不会回调)
 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 View view = LayoutInflater.from(context).inflate(R.layout.item_hrecycler, parent, false);
 MyViewHolder myViewHolder = new MyViewHolder(view);
 return myViewHolder;
 } 

 //填充onCreateViewHolder方法返回的holder中的控件(当一个View需要出现在屏幕上时,该方法会被回调,我们需要再该方法中根据数据来更改视图)
 public void onBindViewHolder(final MyViewHolder holder, int position) {
 holder.iv.setBackgroundResource(images[position]);
 if(onItemClickListener!=null){
 holder.itemView.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  int index = holder.getLayoutPosition();
  //自定义监听第三步
  onItemClickListener.onItemClick(index);
 }
 });
 }
 } 

 //获取数据的数量(告诉RecyclerView有多少个视图需要显示)
 public int getItemCount() {
 return images.length;
 } 

 //自定义的ViewHolder,持有每个Item的的所有界面元素
 public class MyViewHolder extends RecyclerView.ViewHolder{ 

 public ImageView iv; 

 public MyViewHolder(View itemView) {
 super(itemView);
 iv= (ImageView) itemView.findViewById(R.id.imageview);
 }
 } 

 //自定义监听第二步
 public void setOnItemClickListener(OnItemClickListener onItemClickListener){
 this.onItemClickListener=onItemClickListener;
 } 

 //自定义监听第一步
 public interface OnItemClickListener{
 void onItemClick(int position);
 } 

} 

从代码中大家可以了解到RecyclerView的adpater其实只需要实现三个方法,但是我这个adapter中却多出来几个方法,RecyclerView本身是没有条目点击事件的,所以多出来的几个方法是变相的给RecyclerView设置设置条目点击事件的,实际上是使用自定义监听给adapter设置了点击事件;
自定义监听就不再过多介绍了,以前写的博客中有专门介绍自定义监听的,不了解的朋友可以了解一下SwipeRefreshLayout实现ListView下拉刷新上拉加载

给RecyclerView设置adapter之后就可以使用了:

adapter.setOnItemClickListener(new HRecyclerViewAdapter.OnItemClickListener() {
 @Override
 public void onItemClick(int position) {
 ToastUtils.showStaticToast(context,"当前点击的是第"+(position+1)+"张图片");
 }
 });

好了接下来了解下RecyclerView代替纵向listview:
分割线和上面一样,在item中添加view实现分割线,点击事件同样是添加自定义监听;
RecyclerView默认是没办法添加头布局和脚布局的,上面横向的没有使用这一块,但是纵向的在真实项目中就极有可能使用到这个功能点了,在网上看了好多大神们写的添加头布局和脚布局的方法,感觉真的是大神,写的真的很复杂,所以都没有使用,最后在git上找到一个自定义的RecyclerView直接继承系统的RecyclerView,除了添加了两个方法,其他的用法不变,感觉挺实用的,在此就不复制这个类了,源码中都有(MyRecyclerView),使用的话直接复制到项目中即可;
添加头布局和脚布局的方法也极为简单,和listview一样:

//添加头布局(必须在设置完布局管理器再添加头布局和脚布局)
 View headerView = View.inflate(this, R.layout.headerview, null);
 myRecyclerView.addHeaderView(headerView);
 //添加脚布局
 View footView = View.inflate(context, R.layout.footview, null);
 myRecyclerView.addFooterView(footView);

下拉刷新直接使用的是系统自带的SwipeRefreshLayout,这个在以前的博客中也有介绍,在此就不再重复了,不了解的朋友可以了解一下
Android自定义ScrollView使用自定义监听

好了,剩下最后一个功能点,上拉加载更多:
直接给RecyclerView添加活动监听和添加脚布局实现,首先得到当前页面显示的条目个数,adapter一共多少个条目,和当前布局遮挡页面个数
先求出用页面实现个数+被页面遮挡条目个数的和,然后拿这个和和adapter总条目个数做比较,当等于或者大于adapter条目个数的时候直接加载数据:

//添加滑动监听
 myRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
 @Override
 //当RecyclerView的滑动状态改变时触发
 public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 super.onScrollStateChanged(recyclerView, newState);
 } 

 @Override
 //当RecyclerView滑动时触发(类似点击事件的MotionEvent.ACTION_MOVE)
 public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
 super.onScrolled(recyclerView, dx, dy); 

 int visible = layoutManager.getChildCount();//当天页面显示的条目个数
 int total = layoutManager.getItemCount();//当前一共多少个条目
 int past= layoutManager.findFirstCompletelyVisibleItemPosition();//布局上面被当住多少个条目 

 //当活动到最后一个条目时加载更多数据
 if ((visible + past) >= total){
  <span style="white-space:pre"> </span>//发送handler加载数据
  handler.sendEmptyMessageDelayed(1,1000); 

 } 

 }
 }); 

好了,以上功能点已经全部实现,如果大家有更简单的方法实现以上功能点,欢迎告知,感谢;

点击打开链接免费下载源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • 学习Android Material Design(RecyclerView代替ListView)
  • Android仿XListView支持下拉刷新和上划加载更多的自定义RecyclerView
  • Android App开发中使用RecyclerView替代ListView的实践
  • 将替代ListView的RecyclerView 的使用详解(一)
  • Android RecyclerView详解之实现 ListView GridView瀑布流效果
  • Android添加图片到ListView或者RecyclerView显示
  • Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑
  • 浅谈RecyclerView(完美替代ListView,GridView)
(0)

相关推荐

  • Android仿XListView支持下拉刷新和上划加载更多的自定义RecyclerView

    首先给大家展示下效果图,感觉还不错,请继续往下阅读: 下拉刷新:        上划加载        在项目更新的过程中,遇到了一个将XListView换成recyclerView的需求,而且更换完之后大体效果不能变,但是对于下拉刷新这样的效果,谷歌给出的解决方案是把RecyclerView放在一个SwipeRefreshLayout中,但是这样其实是拉下一个小圆形控件实现的,和XListView的header效果不同.在网上找了很多的别人代码,都没有实现我想要的效果,于是自己动手写了一个.

  • Android添加图片到ListView或者RecyclerView显示

    先上图 点击+号就去选择图片 实际上这个添加本身就是一个ListView或者 RecyclerView 只是布局有些特殊 item <?xml version="1.0" encoding="utf-8"?> <liu.myrecyleviewchoosephoto.view.SquareRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑

    使用了RecyclerView嵌套RecyclerView的方案. 购物车的第一个界面为RecyclerView,每个Item里面包含一个店铺.在Item中使用RecyclerView包含店铺和店铺的多个商品. 实现思路: 使用接口回调将第二个adapter的商品选择的监听事件回调给第一个adapter后再在第一个adapter中回调给MainActivity. 使用接口回调将第一个adapter的商品选择的监听事件回调给MainActivity. 在MainActivity中处理第一个adap

  • 学习Android Material Design(RecyclerView代替ListView)

    本文实例实现一下 RecyclerView,代码比较简单,适合初学者,如有错误,欢迎指出. 复习 ListView 可以查看这篇文章深入浅出学习Android ListView基础,了解关于ListView 的基础知识. 实现过程中需要复写BaseAdapter,主要是这4个方法 public int getCount() :适配器中数据集中 数据的个数,即ListView需要显示的数据个数 public Object getItem(int position) : 获取数据集中与指定索引对应的

  • Android App开发中使用RecyclerView替代ListView的实践

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

  • 浅谈RecyclerView(完美替代ListView,GridView)

    Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用. 个人体验来说,RecyclerView绝对是一款功能强大的控件. 首先总结下RecyclerView的特点: 1.支持不同方向,不同排版模式,实现多种展现数据的形式,涵盖了ListView,GridView,瀑布流等数据表现的形式 2.内部实现了回收机制,无需我们考虑View的复用情况 3.取消了onItemClick等点击事件,需要自己手动去写 那么让我们通过一些Demo来了解Rec

  • 将替代ListView的RecyclerView 的使用详解(一)

    RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets, 还有一个 CardView 会在下次介绍使用.官方介绍 RecyclerView 是 ListView 的升级版本,更加先进和灵活.我们写一个简单的实例例,来看一下究竟有多先进和灵活. build.gradle 配置 android { compileSdkVersion 'android-L' buildToolsVersion "20.0.0" defaultConfig

  • Android RecyclerView详解之实现 ListView GridView瀑布流效果

     什么是RecyclerView RecyclerView 是Google推出的最新的 替代ListView.GridView的组件,RecyclerView是用来显示大量数据的容器,并通过有限数量的子View,来提高滚动时的性能. 与ListView不同,RecyclerView 不再负责布局,而是专注于布局复用.布局主要通过 LayoutManager来管理,目前提供了3种常用的布局管理: LinearLayoutManager 线性布局管理器 (ListView效果) GridLayout

  • Android MVVM架构实现RecyclerView列表详解流程

    目录 效果图 导入引用 导入Recyclerview依赖 导入dataBinding引用 代码解析 建立实体类 建立RecyclerView子项 适配器 建立适配器 设置子项点击事件 adapter全部代码 建立VM层 子项点击事件的使用 VM层代码 数据与视图交互 效果图 导入引用 导入Recyclerview依赖 implementation 'androidx.recyclerview:recyclerview:1.1.0' 导入dataBinding引用 dataBinding { en

  • RecyclerView使用详解(代替ListView)

    老规矩,先看效果: Recycler是android5.0版本中新添加的一个view; 使用之前必须添加依赖库: dependencies { compile 'com.android.support:recyclerview-v7:23.0.+' } 这里我就不再过多的介绍RecyclerView,既然大家在找使用RecyclerView的demo想必大家都了解过了,如果不了解网上随便打开一篇RecyclerView的文章应该都有,已经烂大街,在此就不过多的重复了: 今天写的demo主要是利用

  • RecyclerView使用详解

    RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recylerview即回收view也可以看出.官方对于它的介绍则是:RecyclerView 是 ListView 的升级版本,更加先进和灵活.RecyclerView通过设置LayoutManager,ItemDecoration,ItemAnimator实现你想要的效果. 使用LayoutManager来确

  • ListView嵌套GridView使用详解及注意事项

    MainActivity如下: 复制代码 代码如下: package cn.testlistviewandgridview; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; /** * Demo描述: * ListView嵌套GridView使用详解 * 即List

  • Android ListView里控件添加监听方法的实例详解

    Android ListView里控件添加监听方法的实例详解 关于ListView,算是android中比较常见的控件,在ListView我们通常需要一个模板,这个模板指的不是住模块,而是配置显示在ListView里面的东西,今天做项目的时候发现想要添加一个ImageView监听方法,发现崩了,也许是好久没有动ListView竟然忘了不能直接在主UI的xml文件里面调用其他xml文件的控件,哪怕ListView用的是这个xml文件. [错误示范]: 直接调用ImageView这个控件是ListV

  • Android RecyclerView 基础知识详解

    本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息.可能我们需要较长的时间来消化Android L引入的新东西. 这些天我一直在研究RecyclerView,并想在此给各位分享一下到目前为止我的成果. RecyclerView是什么? RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持. 在开发RecyclerView时充分考虑了扩展性,因此用它

  • Android入门教程之RecyclerView的具体使用详解

    目录 RecyclerView 的基本用法 横向滚动 RecyclerView 点击事件 RecyclerView 的基本用法 和我们之前学习的控件不一样,RecyclerView 属于新增控件,所以我们需要在项目的 build.gradle 中添加 RecyclerView 库的依赖,才能使用该控件 dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementa

  • Android开发使用RecyclerView添加点击事件实例详解

    目录 引言 一.RecyclerView基本使用 1. 添加适配器Adapter 2. 创建列表的每个项的item_layout.xml文件 3. 在activity中使用 二.RecyclerView点击事件详细步骤 1. 在RecyclerView对应的Adapter类里面新建接口 2. 在Adapter类里创建setOnItemClickListener方法 3. 在Adapter类的onBindViewHolder里给每个item设置回调 4. 在RecyclerView对应的Activ

随机推荐