首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin入门(23)适配器进阶表达

前面在介绍列表视图网格视图时,它们适配器代码都存在视图持有者ViewHolder,因为Android对列表视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应视图对象。...所以ViewHolder便应运而生,它在列表项首次初始化时,就将其视图对象保存起来,后面再次加载该视图时,即可直接从持有者处获得先前视图对象,从而减少了系统开销,提高了系统运行效率。...有鉴于此,循环视图适配器把视图持有者重用逻辑剥离出来,由系统自行判断并处理持有者重用操作。...开发者继承RecyclerView.Adapter之后,只要完成业务上代码逻辑即可,无需进行BaseAdapter视图持有者手工重用。...    override fun getItemCount(): Int = infos.size     //创建整个布局视图持有者     override fun onCreateViewHolder

1.8K41

从 Android 开发到读懂源码 第05期:Leanback 结构源码简析

,Android 原生封装好了,支持子视图焦点动效及行标题展示 Presenter 提供视图创建及数据绑定,类似 RecyclerView.Adapter 功能,注意是类似,下面的 ItemBridgeAdapter...,继承 RecyclerView.Adapter 主要有两个构造方法,需要传递一个 ObjectAdapter public ItemBridgeAdapter(ObjectAdapter adapter...中每一个 Item 视图,如果使用 ListRow 则是创建每一行中每一个 Item 视图 @Override public ViewHolder onCreateViewHolder...Presenter 中 onCreateViewHolder 进行 holder view 创建 presenterVh = presenter.onCreateViewHolder...= null) { mAdapterListener.onBind(viewHolder); } } 抛开 RecyclerView 视图部分原理,此时视图创建和数据绑定都已经完成了

2.1K71
您找到你想要的搜索结果了吗?
是的
没有找到

Android开发笔记(一百二十二)循环器视图RecyclerView

调用RecyclerViewsetAdapter方法前,我们要先实现一个从RecyclerView.Adapter派生而来数据适配器,用来定义列表布局与具体操作。...onCreateViewHolder : 创建整个布局视图持有者。输入参数中包括视图类型,可根据视图类型加载不同布局,从而实现带头部列表布局。...onBindViewHolder : 绑定每项视图持有者。 下面是可以重写也可以不重写方法: getItemViewType : 返回每项视图类型。...这里返回视图类型给onCreateViewHolder方法使用。 getItemId : 获得每项编号。...: 1、自带ViewHolder及其重用功能,无需开发者手工重用ViewHolder; 2、自带列表点击长按功能,需要开发者自己实现点击长按事件监听; 3、增加区分不同列表视图类型

2.4K20

构建Recyclerview DSL

此框架已经在我项目中大规模使用,并且极大地提高了Recyclerview列表构建效率复用能力。...这是一个大概效果,Recyclerview DSL中,我们可以用DSL风格去配置Item被如何加入到Rec,各个Item风格是什么样子,具有很大灵活性拓展性。...比如说,分页加载,列表变化,其他所有可变Recyclerview列表 方案:这种情况下,我们把 ItemManager拿出来单独操作即可,善用 autorefresh方法 DiffUtil lateinit...于是我开始思考在Recyclerview架构中,确定一类视图到底需要什么?哪些东西可以用一个最小集合来定义一类视图?...我们来梳理一下: 展现给用户看东西 = 视图 + 填充数据 视图 <- OnCreateViewHolder中相关逻辑 数据填充 <- OnBindViewHolder中把数据Set到View中 所以说

90510

揭开RecyclerView庐山真面目

谷歌在Android L中新增了RecyclerView,是一种新视图组,目标是为任何基于适配器视图提供相似的渲染方式。...回收或重用一个View时候,LayoutManager会向适配器请求新数据来替换旧数据,这种机制避免了创建过多View频繁调用findViewById方法。...目前RecyclerView库提供了如下三种子Manager: LinearLayoutManager:展示了水平或者垂直滚动列表,相当于之前学习ListView,但是没有页眉页尾。...使用时需要重写以下两个主要方法: onCreateViewHolder:用来展现视图和它持有者。 onBindViewHolder:主要用来把数据绑定到视图上。...除了上面两个主要元素,通常还会使用到如下三个类: ViewHolder:维持了所有被数据填充实体视图引用。 ItemDecoration:一个实体周围装饰。

1.8K80

Android开发笔记(一百七十二)第二代翻页视图ViewPager2

正如RecyclerView横空出世取代ListViewGridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来翻页视图ViewPager。...与ViewPager相比,ViewPager2支持更丰富界面特效,包括但不限于下列几点: 1、不但支持水平方向翻页,还支持垂直方向翻页; 2、支持RecyclerView.Adapter,允许调用适配器对象...GoodsInfo> goodsList) {         mContext = context;         mGoodsList = goodsList;     }     // 创建列表视图持有者..., false);         return new ItemHolder(v);     }     // 绑定列表视图持有者     public void onBindViewHolder...mGoodsList.get(position).pic);         holder.tv_desc.setText(mGoodsList.get(position).desc);     }     // 定义列表视图持有者

2.2K30

【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )

RecyclerView 列表布局 应用 视图绑定 ( ViewBinding ) VI . GitHub 代码地址 I ...., 及 关联界面操作 , 其中 this 就是 ViewGroup 类型 , 即组件本身 , 调用上述方法 , 可以将两个操作都完成 ; package kim.hsl.vb; import android.content.Context...RecyclerView 列表布局 应用 视图绑定 ( ViewBinding ) ---- RecyclerView 列表布局 应用 视图绑定 ( ViewBinding ) : ① 视图绑定需要在...Adapter 适配器 onCreateViewHolder( ) 方法中进行初始化 , 只有在这里才能拿到 ViewGroup parent 关联组件父类容器 ; ② 初始化视图绑定类并关联界面..., 及 关联界面操作 , 其中 this 就是 ViewGroup 类型 , 即组件本身 , 调用上述方法 , 可以将两个操作都完成 ; ③ 自定义 ViewHolder 构造函数 : public

1.5K30

一次使用Kotlin实现酷炫多选操作尝试

想法非常聪明:把屏幕分成两部分,就如Vitaly解释那样,你总是能“看见管理已经选择项目,而不需要离开当前视图”。而筛选只应用在主列表,不会影响已经选择item列表。...一个具有两个页面的ViewPager,每个页面包含一个RecyclerView。未被选择item在左边列表。选中item在右边列表。...比如,如果你点击了一个未被选择item,将发生以下事情: 被点击item从未被选中item列表中移除并被添加到包含了两个列表容器中。 选中item位置是固定。...有了它你就可以在两个adapter中使用相同viewholder。 3.接下来,为选中列表选中列表创建两个adapter。...callback.onClick(holder.getAdapterPosition()); // ... }); } } Adapter继承两个不同基类原因是选中

1.2K20

浅谈RecyclerView性能优化

mAttachedScrap:只保存重新布局时从RecyclerView分离item无效、移除、更新holder。...CacheView缓存:mCachedViews又称离屏缓存,用于保存最新被移除(remove)ViewHolder,已经RecyclerView分离视图,这一级缓存是有容量限制,默认最大数量为...(2)如果是RecyclerView滚动情况下缓存(比如滑动列表),在滑动时填充布局。 先移除滑出屏幕item,第一级缓存mCachedViews优先缓存这些ViewHolder。...上面讲传入payload原理一样,这两个是Android默认提供给我们使用两个封装类。这里我以DiffUtil举例说明该如何使用。...应当把事件绑定在ViewHolder创建时候对应rootView进行绑定。 2.数据处理与视图绑定分离,去除onBindViewHolder方法里面的耗时操作,只做纯粹数据绑定操作。

1.7K10

RecyclerView技术栈参考资料:

我想,无论是开发者还是使用者,一定都非常喜欢这次版本跟新。 同时,这次也带来了两个全新View控件:RecyclerViewCardView。...定制Item条目 - ListView只能实现垂直线性排列列表视图,与之不同是,RecyclerView可以通过设置RecyclerView.LayoutManager来定制不同风格视图,比如水平滚动列表或者不规则瀑布流列表...这就需要我们重写以下两个函数: public VH onCreateViewHolder(ViewGroup parent, int viewType) 创建Item视图,并返回相应ViewHolder...当然,你也可以对RecyclerView设置多个ItemDecoration,列表展示时候会遍历所有的ItemDecoration并调用里面的绘制方法,对Item进行装饰。....notifyDataSetChanged(),来刷新列表,因为这样做会触发列表重绘,所以并不会出现任何动画效果,因此需要调用一些以notifyItem*()作为前缀特殊方法,比如: public

1.2K10

Android 自定义LayoutManager实现花式表格

大佬写控件确实给我工作带来了极大方便,不过还是有些问题存在: 无法实现不规则表格 其核心是二层RecyclerView嵌套,如果只用一层RecyclerView将会带来性能提升 多个RecyclerView...TableView具有如下特点: 支持不规则表格 同时支持横向纵向滚动 支持顶部左侧悬浮 基于RecyclerView,所以RecyclerView自定义子视图、高效回收、子视图多样性这些特点它都有...为了确保表格每一个单元格长度宽度都一样(子视图可以在横纵方向上占有多个单元格),宽和高都使用两种方式: 设置具体值,那么单元格宽或者高值就是具体 设置一行或者一列可以容纳单元格数量 所以宽高各有两种...<TableCell onCreateViewHolder(View root, int itemType) { // itemType是子视图布局文件 // 根据布局返回具体ViewHolder...super(itemView); mContent = itemView.findViewById(R.id.tv_name); } @Override protected void onBind

1.7K21

RecyclerView优化实战指南

它可以自动回收不可见视图,并且可以使用不同布局管理器来实现不同布局。RecyclerView 还提供了一些回调函数,允许你在视图复用时进行一些自定义操作。...优化技巧 对于 RecyclerView,我们可以采用以下优化技巧: 1. 使用 DiffUtil DiffUtil 是计算两个列表之间差异工具类,可帮助 RecyclerView 局部刷新数据。...在 Adapter 中重写 DiffUtil.Callback,创建新列表 DiffResult 与旧列表进行比较,从而更新列表数据。...设置 Recyclerview 固定大小 在 Recyclerview 布局中,设置 android:layout_height android:layout_width 值为具体数值,可以避免列表宽高随着内容变化而变化...使用预加载 使用预加载技术可以使 RecyclerView 在滑动过程中提前加载更多数据,保证滑动流畅性用户体验。

49420

RecyclerView中使用CheckBox出现勾选混乱解决方法

下面我们就来着手解决这个问题,其实要解决也很简单,可以定义一个boolean类型数组或者列表,用它来控制CheckBox选中状态,当某个CheckBox被选中时候将其选中状态记录在数组或列表中,当某个...CheckBox滚动到屏幕上时候,再用数组或列表中对应值把它选中状态改回来就好了,修改后代码如下: public class MainActivity extends AppCompatActivity...flag = new boolean[100];//此处添加一个boolean类型数组 @Override public RecyclerView.ViewHolder onCreateViewHolder...下面我们来讨论一下,如果要在RecyclerView外面再添加一个CheckBox,用外面的CheckBox来控制RecyclerViewCheckBox全选取消全选,要如何实现呢?...却是我们点击Button所在下一个item,后面的删除也会各种混乱,这是因为函数里面的传入参数position,它是在进行onBind操作时确定,在删除单项后,已经出现在画面里项不会再有调用onBind

1.7K20

实战 | 认识 RecyclerView

RecyclerView 是一个容器,它用于显示列表形式 (list) 或者网格形式 (grid) 数据,比如文本或者照片。 当列表滑动时候,实际上只有少量邻近视图会显示在屏幕上。...当视图滑出屏幕时,RecyclerView 会复用它并且填充新数据。由于它是通过回收已有的结构而不是持续创建新列表项,所以它可以有效提高应用时间效率空间效率。...RecyclerView 使用 ViewHolder 模式,这样做可以提高性能,因为它无需频繁调用 findViewById() 方法即可访问表项视图RecyclerView 使用 LayoutManager...,它支持纵向滑动列表横向滑动列表,以及交错布局列表网格布局列表。...重写 onCreateViewHolder() 当 ViewHolder 创建时候会调用该方法。在该方法里进行初始化填充 RecyclerView表项视图

1.1K30

简易理解设计模式之:适配器模式——Android列表视图控件设计方式

把一个类接口变成客户端所期待另一种接口,从而使原本因接口不匹配而无法在一起工作两个类能够在一起工作。 类图: 适配器模式也分两种:类适配器模式对象适配器模式。...RecyclerView是一个滑动列表控件,可以动态在上面添加View数据,做成一个列表视图,大致如下: 它多好用就不介绍了,主要看它有关适配器模式部分结构~ 1.1、RecyclverView...被适配角色:ViewHoler处理View对象。 使用端:RecyclerView。 1.3、分析 RecyclerView本质还是动态添加一个一个子View形成一个列表视图。...最后我们可以得出结论,这个模式用法之一是:需要一个统一输出接口,而输入端类型不可预知。 2、自定义一个列表视图 此部分采用代理模式篇幅中例子,继续做一个表视图控件。...看过那篇文章朋友可以发现,同样是做一个列表视图,iOS用是代理模式而Android设计用是适配器模式。两者都作为结构型设计模式,真的有异曲同工之妙。

67610

使用 ConcatAdapter 顺序连接其他 Adapter

这方面的一个用例,是在列表头部底部显示加载状态: 当列表从网络中检索数据时,我们想显示一个加载中图标;如果出现错误,我们要显示错误信息重试按钮。...△ RecyclerView Adapter 数据 在头部底部显示加载状态 我们可以在头部或底部显示一个进度条或错误信息。列表成功加载数据后,头部或底部便不应该再显示任何信息。...、怎么显示),您可以只实现一个 Adapter,然后创建两个实例: 一个作为头部、一个作为底部。...当您复用 ViewHolder 时,确保同一视图类型没有对应不同 ViewHodler!防止出现这个问题最佳实践之一,便是将布局 ID 作为视图类型返回。 <!...数据变更通知 当 ConcatAdapter 中一个 Adapter 调用了通知函数时,ConcatAdapter 会在更新 RecyclerView 之前计算新项目位置。

58420
领券