是复用的,在RecyclerView中,是把ViewHolder作为缓存的单位了,然后convertView作为ViewHolder的成员变量保持在ViewHolder中,也就是说,假设手机屏幕可显示10...注意的是:RecyclerView不提供ListView中的setOnItemClickListener方法,我们可以在ViewHolder中添加类似的点击事件。...前面我们介绍RecyclerView时,说过RecyclerView适合多种嵌套的布局效果, ViewHolder更适合多种子布局的列表。...所以我们看 RecyclerView的Adapter中的一个方法如下: public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType...第一步:添加布局状态标识,并增加一项FooterView 在adapter中声明布局状态标识,是普通布局还是foot布局 private static final int TYPE_NORMAL_ITEM
在调用RecyclerView的setAdapter方法前,我们要先实现一个从RecyclerView.Adapter派生而来的数据适配器,用来定义列表项的布局与具体操作。...onCreateViewHolder : 创建整个布局的视图持有者。输入参数中包括视图类型,可根据视图类型加载不同的布局,从而实现带头部的列表布局。...下面是可以直接调用的方法: notifyItemInserted : 通知适配器在指定位置插入了新项。 notifyItemRemoved : 通知适配器在指定位置删除了原有项。...,开发者可自定义头部类型与一般类型, //然后在onCreateViewHolder方法中根据类型加载不同的布局,从而实现带头部的网格布局 return 0; } @Override...方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机在竖屏/横屏之间的显示切换(如竖屏时展示ListView,横屏时展示GridView),也适合在不同屏幕分辨率如手机/平板之间的显示切换(如手机上展示
它可以自动回收不可见的视图,并且可以使用不同的布局管理器来实现不同的布局。RecyclerView 还提供了一些回调函数,允许你在视图复用时进行一些自定义操作。...使用 ViewHolder,可以在 Adapter 中重写 onCreateViewHolder 方法创建 ViewHolder,并在 onBindViewHolder 方法中获取 ViewHolder...我们可以在 adapter_layout.xml 中使用 标签,将数据绑定到视图的布局文件中,从而减少代码量。...设置 Recyclerview 的固定大小 在 Recyclerview 的布局中,设置 android:layout_height 和 android:layout_width 的值为具体数值,可以避免列表项的宽高随着内容的变化而变化...如果这种行为不是必需的,可以在 Adapter 中重写 onItemRangeChanged 方法,并在其中禁止滑动。
前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。...为方便理解循环适配器的Kotlin编码,下面以微信的公众号消息列表为例,给出对应的消息列表Kotlin代码: //ViewHolder在构造时初始化布局中的控件对象 class RecyclerLinearAdapter...onItemLongClick(v, position) true } } //ItemHolder中的属性在构造时初始化 inner...注意到适配器代码仍然通过findViewById方法获得控件对象,可是号称在Anko库的支持之下,Kotlin早就无需该方法就能直接访问控件对象了呀,为啥这里依旧靠老牛拉破车呢?...这下不管是在Activity代码,还是在适配器代码中,均可将控件名称拿来直接调用了。
说白了就是ui的列表,可以很灵活的控制列表中每一项的数据,布局,动画。三、RecycleView的优点 1、支持局部刷新。 2、可以自定义item增删时的动画。...可以看到该适配器类主要有3个方法和1个自定义ViewHolder组成:onCreateViewHolder: 创建ViewHolder并返回,后续item布局里控件都是从ViewHolder中取出。...MyHolder : 这是RecyclerView.ViewHolder的实现类,用于初始化item布局中的子控件。需要注意的是,在这个类的构造方法中需要传递item布局的View给父类 。...我们可以在RecyclerView的Adapter中自定义一个接口,并创建一个供其他类设置监听的方法。...当我们定义好接口后,我们在onBindViewHolder()方法中为holder.itemView(itemView是列表中的每一个item项)设置了点击事件监听,然后在onClick()中判断是否有用户传递过
,然而在日常开发中,响应点击事件无疑都是必须的,虽然它没有提供,但是我们可以手动添加OnItemClickListener,我们可以在Adapter中添加这个回调接口: 例子2:可以点击的RecyclerView...的逻辑之中,对RecyclerView的每一个itemView设置点击事件: @Override // 填充onCreateViewHolder方法返回的holder中的控件 public void...实现滚动时内容联动 例子3:RecyclerView制作相册效果 效果:在原工程的基础上进行修改,改成相册效果,即上面显示一张大图,下面的RecyclerView做为图片切换的指示器。...,就是我们在适配器中绑定ViewHolder的方法中需要重新给我们的itemView布局设置height,这里是生成随机数来设置高度的。...方法中: @Override // 填充onCreateViewHolder方法返回的holder中的控件 public void onBindViewHolder(final MyHolder holder
小结 在RecyclerView中添加分割线需要的操作已经在上文中比较详细的说明了,这里再总结一下。...关于实现的方法也有很多种。目前网上能搜到的主流解决办法是在Adapter中重写getItemViewType方法为头部或者底部布局生成特定的item。从而实现头部布局以及底部布局。...方法(该方法在Adapter与RecyclerView相关联时回调),如下: @Override public void onAttachedToRecyclerView(RecyclerView recyclerView...中重写onViewAttachedToWindow方法(该方法在Adapter与RecyclerView相关联时回调),如下: @Override public void onViewAttachedToWindow...RecyclerView中缓存策略最重要的方法,该方法是从RecyclerView的回收机制实现类Recycler中获取合适的View,或者新创建一个View View getViewForPosition
添加分割线使用了系统提供的类; 个人感觉完全没必要,甚至感觉多次一举,个人感觉完全可以给RecyclerView和item设置背景实现分割线或者在item布局中添加view布局实现; 首先了解下RecyclerView...方法,返回一个自定义的ViewHolder(当RecyclerView需要一个ViewHolder时会回调该方法,如果有可复用的View不会回调) public MyViewHolder onCreateViewHolder...方法返回的holder中的控件(当一个View需要出现在屏幕上时,该方法会被回调,我们需要再该方法中根据数据来更改视图) public void onBindViewHolder(final MyViewHolder...的adpater其实只需要实现三个方法,但是我这个adapter中却多出来几个方法,RecyclerView本身是没有条目点击事件的,所以多出来的几个方法是变相的给RecyclerView设置设置条目点击事件的...; RecyclerView默认是没办法添加头布局和脚布局的,上面横向的没有使用这一块,但是纵向的在真实项目中就极有可能使用到这个功能点了,在网上看了好多大神们写的添加头布局和脚布局的方法,感觉真的是大神
的使用 在使用RecyclerView时候,必须指定一个适配器Adapter和一个布局管理器LayoutManager。...recycleView布局 现在需要将 RecyclerView 添加到上次的微信fragment对应的布局文件中。...的Adapter类 ② 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类。...③ 在Adapter中实现3个方法: onCreateViewHolder() 这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。...3个方法: ① onCreateViewHolder 初始化要加载的布局 ② onBindViewHolder 来加载数据 ③ getItemCount 得到数据源的大小 3.和ListView一样使用
在实现的过程中,我也会将 RecyclerView 的每个部分揉碎了展现给大家,这样大家就可以在自己的应用中实现了。 RecyclerView 是 "何方神圣"?为什么选择它呢?...当视图滑出屏幕时,RecyclerView 会复用它并且填充新的数据。由于它是通过回收已有的结构而不是持续创建新的列表项,所以它可以有效提高应用的时间效率和空间效率。...在 ViewHolder 中,创建一个变量来引用 TextView,然后将它指向表项布局里对应的视图。...() { } 重写 RecyclerView.Adapter 的类需要重写三个方法 onCreateViewHolder()、onBindViewHolder...重写 onCreateViewHolder() 当 ViewHolder 创建的时候会调用该方法。在该方法里进行初始化和填充 RecyclerView 中的表项视图。
文章目录 一、为 RecyclerView 设置不同的布局样式 二、完整代码 三、RecyclerView 相关资料 一、为 RecyclerView 设置不同的布局样式 ---- 为 RecyclerView...( ) 方法 : 这里为不同位置的组件设置不同的布局类型 ; @Override public int getItemViewType(int position) {...} ③ 根据布局类型加载不同的布局文件 : 在 onCreateViewHolder( ) 方法中 , 根据当前的 int viewType 参数 , 加载不同的布局文件 ; @Override...: 在 onBindViewHolder( ) 方法中为布局组件绑定数据时 , 可以调用 getItemViewType 方法 , 获取当前的布局类型 , 然后根据该布局类型 , 将 ViewHolder...onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 根据不同的组件类型加载不同类型的布局文件
RecyclerView.Adapter 在使用 RecyclerView 这个强大的滚动控件的时候,需要为它提供一个 Adapter 适配器,这个适配器继承自 RecyclerView.Adapter...onCreateViewHolder(ViewGroup parent, int viewType) 方法 用于加载 RecyclerView 子项的布局,然后返回一个 ViewHolder 对象,ViewHolder...onBindViewHolder(ViewHolder viewHolder, int i) 方法. 为子项绑定数据。 调用这两个方法后,子项就既有了布局又有了数据。...的id RecyclerView recyclerView = (RecyclerView) findViewById(R.id.text_cycler); //定义布局管理器...布局的子项布局中的所有控件id,本次实验只有TextView这一种控件 button = (Button) view.findViewById(R.id.button);
我们可以看到,vlayout是一个强大的RecycleView的LayoutManager,它可以帮我在RecycleView中呈现多种布局方式。...我们在getItemViewType方法中肯定position的值,返回不同的type,这样等会在onCreateViewHolder方法中就可以返回不同的ViewHolder了。 3....我们前面已经在每个AdapterDataObserver中存了相对于的Adapter的起始的Position,我们只需要不停的判断现在传给这个方法的position是在(子的Adapter 的起始position..., p.second);,这样当前的这个就存在了key为0的集合中了,然后我们在onCreateViewHolder方法中通过Adapter adapter = mItemTypeAry.get...值),因为每个的index值不同,所以生成的ViewType也不同,然后我们在onCreateViewHolder方法里面,用还原的B方法,获取到index值,然后通过这个index
在最新的 recyclerview:1.2.0-alpha02[1] 中发布了一个关于 Adapter 的新特性 MergeAdapter 。...通过 setAdapter() 方法,我们只能给 RecyclerView 设置一个 Adapter 。...在 recyclerview:1.2.0-alpha02 中,其实我们仍然只能设置一个 Adapter ,但是这个 Adapter 可以是 MergeAdapter ,一个可以做加法的 Adapter...MergeAdapter 构造函数中的参数顺序,就标识了列表中数据的显示顺序。 第一块布局是 Teacher 。在实际开发中,常常可以用作 Header View 。...在多类型 RecyclerView 中,部分数据需要横向滑动展示,部分数据需要纵向滑动展示,这种情况已经比较常见了。 最后 MergeAdapter 的一些学习资源。
表示当前是第几个Item,然后我们可以通过position拿到当前的Item对象,然后判断这个item对象需要那种视图,返回一个int类型的视图标志,然后在onCreatViewHolder方法中给引入布局...,还要存放在多个list里面,下次下拉刷新时还要在多个list中累加数据,这样就有点麻烦了 不挑出来直接就只判断type,然后根据type去调用不同的layout,然后在绑定数据的方法中再次判断是不是自己想要的...mList.get(position).getType(); } 我们重写了getItemViewType()方法后,就要写不同的item(布局文件),然后在onCreatViewHolder方法引入布局...,在该方法中写。...在activity中加载recyclerview时,要加入布局样式,比如说,普通的LinearLayoutManager,或者GridLayoutManager,StaggeredGridLayoutManager
一、问题 从下面堆栈中可以看出,RecyclerView此时正在执行布局,尝试获取ViewHolder缓存时发生了crash。...所以在分析这个问题前,我们先来简单了解一下RecyclerView的布局流程及缓存策略 ?...二、准备 1、布局流程 通过RecyclerView的dispatchLayout方法,可以知道其布局过程大概分为三个步骤: dispatchLayoutStep1: preLayout预布局阶段,主要处理...LayoutManager的onLayoutChildren方法处理,它会根据当前子View的ViewHolder状态将其回收至各个缓存队列中,然后寻找锚点并往上下两个方法进行填充,当需要子View时,...的init方法中创建的,init是在onCreateView进行调用的,只会执行一次: ?
现在很多人都是用RecyclerView,很简单的用法,布局多样化,主要是有瀑布流。这才知道RecyclerView.LayoutManager真正的强大。...但是说要addHeaderView这个的话,RecyclerView没有实现,所以我用了XRecyclerView,其实它也是在RecyclerView的基础上再次封装的,用起来还是蛮好的。...一般我们会直接在item布局中的最外层设置一个id=”@+id/…”,然后在onBindViewHolder中用holder.**.setOnClickListener()进行事件处理,你看看你是不是这样做的...的构造方法中也用到了super(view)。...(parent, viewType); } } 当我们每次addHeaderView时他都会进行notifyDataSetChanged,而且在onCreateViewHolder也有了对应的isHeaderType
1是安卓系统给的一个item布局,最后一项是String数组,也就是数据,之后寻找ListView的实例,调用setAdapter方法设置适配器 public class MainActivity...使用步骤: 1.在布局文件中使用RecyclerView,定义id,宽高与空间相同 2.准备RecyclerView的子项item布局,之后要在适配器类中使用,这里就不在赘述 3.定义个泛型类,如之前在...,在开头我们就声明了一个List的成员变量students,之后,添加构造方法,传入一个LIst,将其赋值给RecycleAdapter的成员变量students 之后需要复写三个方法,OnCreateViewHolder...onCreateViewHolder方法里面,首先就是通过LayoutInflater.from()方法接收一个context,之后,再通过inflate将item布局放进总布局中,之后再将这个view...7.设置onClick方法,RecycleView里没有onClick方法,需要我们自己写,在哪里写呢?在RecycleAdapter中的onBindViewHolder方法中 ?
提出这个需求时,问了朋友,他说使用了两个Adapter、两个布局实现了这个效果。当时听了,我的内心是崩溃的。这样的设计方案在实际的App开发中是绝对不行的。如果单纯的为 了实现这个功能,那么可以理解。...RecyclerView的setLayoutanager()方法可以让其布局在不同的排列方式间进行切换,常见的:从线性布局到网格布局、瀑布流。...我们需要重写该方法来实现不同的布局方式。在重写该方法时,返回值为Int型。...利用该方法的返回值,我们就可以在onCreateViewHolder方法中去根据该返回值加载不用的布局了,然后在onBindViewHolder方法中同样根据不同的type去绑定对应布局的对应控件。...基本的实现流程,到这里就介绍完了,下面是具体的实现 第一步:在adapter中重写getItemViewType()方法;添加setType(int type)方法 /** * 点击切换布局的时候调用这个方法设置
中的代码就有一些臃肿了,我们最好不要这样做,所以我们需要将刚才所添加的事件抽离到一个方法里面,这个方法专门用来处理view的事件,在StringAdapter中新增一个handlerEvents方法,代码如下...; } }); 这一段代码就比较多了,说明一下,先看onScrolled回调方法,这是表示RecyclerView在滚动的回调,在onScrolled()方法中...六、RecyclerView多布局使用 在前面的使用中我们在操作写适配器的代码时,都是一个item布局,而有时候数据不同需要显示的布局也不同,就存在多布局的情况,这种情况应该怎么处理呢?...View.GONE : View.VISIBLE); }); 在创建分组item布局的时候我设置RecyclerView为隐藏的,在点击group所在的LinearLayout布局时...我增加了一个show变量,用来控制适配器Item的选中框是否显示,提供了show变量的get和set方法,在set方法中赋值之后调用notifyDataSetChanged()方法对适配器进行刷新,这个方法会触发
领取专属 10元无门槛券
手把手带您无忧上云