首页
学习
活动
专区
圈层
工具
发布

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

前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。...随着用户的下拉或者上拉手势,已经被回收的列表项要重新加载到界面上,倘若每次加载都得从头创建视图对象,势必增加了系统的资源开销。...、长按监听器itemLongClickListener等等,故而完全可以把这些通用部分提取到一个基类,然后具体业务再从该基类派生出特定的业务适配器类。...下面便是个循环视图的网格适配器,它实现了类似淘宝主页的网格频道栏目,具体的Kotlin代码如下所示: //把公共属性和公共方法剥离到基类RecyclerBaseAdapter, //此处仅需实现getItemCount...这下不管是在Activity代码,还是在适配器代码中,均可将控件名称拿来直接调用了。

2.7K41

【Android】RecyclerView实现新闻列表布局(1)适配器使用相关问题

4:getItemCount 作用:返回 RecyclerView 中的 item 总数 参数:无 返回值:int 类型的 item 数量 触发时机:RecyclerView 需要知道数据量时调用...滑动过程中:如果后续滑动时,新的列表项进入屏幕,而之前回收的 ViewHolder 不足以复用(比如快速滑动导致临时需求增加),可能会额外多创建几个 ViewHolder作为 “缓冲”(比如 12 个)...)提供正确的 布局参数(LayoutParams) false:仅加载布局,不添加到 parent,返回加载的布局视图。...管理器内部是布局方向,最后为RecycleView设置适配器 五:效果 左图垂直排列,右图横向排列 总结:item匹配适配器,找到布局转为视图,ViewHolder(需要继承)作为item的管理器;RecycleView...匹配Adapter需要设置布局管理器,让item以怎样的形式展现

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

    RecyclerView必知必会

    ListView vs RecyclerView ListView相比RecyclerView,有一些优点: addHeaderView(), addFooterView()添加头视图和尾视图。...int getItemCount(): 返回Item的个数。...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...那么如何在不破坏原有Adapter实现的情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合的方式,在不破话原有类代码的情况下,对原有类的功能进行扩展。...回顾 回顾整篇文章,发现我们已经实现了RecyclerView的很多扩展功能,包括:打造万能适配器、添加Item事件、添加头视图和尾视图、设置空布局、侧滑拖拽。

    6.5K20

    偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder

    资源回收,数据绑定,布局显示,分割线,Item动画多个模块高度解耦,灵活优雅。其实,RecyclerView在使用上已经是相当简单了(个人觉得),但仍有很多代码是可以加以封装的。...onCreatedViewHolder()方法作用是绑定item视图,可以进一步封装,给子类提供一个getLayoutItemId的抽象方法,这样就可以简化成一行代码了。...因此我们发现,这个adapter的核心代码在与onBindViewHolder()中,作用是将数据跟视图(ViewHolder)绑定,可以给子类提供一个bindData()抽象方法。...RecyclerView强制我们使用ViewHolder模式,然而缺不可避免地要写findViewById代码,有没有办法不写这样的代码呢?甚至连ViewHolder都不写呢?当然可以!...public void bindData(RecyclerViewHolder holder, int position,String item) { //调用

    1.8K60

    RecyclerView 必知必会

    int getItemCount(): 返回Item的个数。...RecyclerView的回收机制有个重要的概念,即将回收站分为Scrap Heap和Recycle Pool,其中Scrap Heap的元素可以被直接复用,而不需要调用onBindViewHolder...其中next()调用了getViewForPosition(currentPosition),该方法是从RecyclerView的回收机制实现类Recycler中获取合适的View,在后文的回收机制中会介绍该方法的具体实现...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...那么如何在不破坏原有Adapter实现的情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合的方式,在不破话原有类代码的情况下,对原有类的功能进行扩展。

    5.2K90

    实战 | 认识 RecyclerView

    由于它是通过回收已有的结构而不是持续创建新的列表项,所以它可以有效提高应用的时间效率和空间效率。...粉红色的方格表示屏幕上正在显示的表项,黄色的方格表示屏幕可视范围之外的表项是如何被回收并转为新的视图 为什么您需要使用 RecyclerView 呢?...RecyclerView 使用 ViewHolder 模式,这样做可以提高性能,因为它无需频繁调用 findViewById() 方法即可访问表项的视图; RecyclerView 使用 LayoutManager...随着用户滑动屏幕,ViewHolder会被回收 (使用新数据进行填充),已有的表项会在一端消失,并且在另一端显示一个新的表项。...重写 onCreateViewHolder() 当 ViewHolder 创建的时候会调用该方法。在该方法里进行初始化和填充 RecyclerView 中的表项视图。

    1.9K30

    RecyclerView 必知必会

    int getItemCount(): 返回Item的个数。...RecyclerView的回收机制有个重要的概念,即将回收站分为Scrap Heap和Recycle Pool,其中Scrap Heap的元素可以被直接复用,而不需要调用onBindViewHolder...其中next()调用了getViewForPosition(currentPosition),该方法是从RecyclerView的回收机制实现类Recycler中获取合适的View,在后文的回收机制中会介绍该方法的具体实现...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...那么如何在不破坏原有Adapter实现的情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合的方式,在不破话原有类代码的情况下,对原有类的功能进行扩展。

    3.7K70

    RecyclerView技术栈参考资料:

    滚出可见区域的条目将被回收,并在下一个条目可见的时候被复用。 我们可以从下图中得到更直观的解释: ? 左边的图是数据初始化后的示例,当向上滚动视图的时候,当条目不可见之后将被回收。...不过,视图回收本身并不是什么新鲜事。但是回想之前我们写的ListView,无论从它的的性能表现着手,还是语法的书写,甚至数据的绑定都未免略显臃肿。...另外我们还需要重写另一个方法,像ListView-Adapter那样,同样地告诉RecyclerView-Adapter列表Items的总数: public int getItemCount() 返回该..., int position) { viewHolder.textView.setText(items.get(position)); } @Override public int getItemCount...GridLayoutManager 网格Item视图。 StaggeredGridLayoutManager 交错的网格Item视图。

    2K10

    自定义无限循环的LayoutManager

    measure 首先介绍测量方法,与自定义ViewGroup类似,测量通常是固定的逻辑不需要自己实现,开发者无需复写测量方法,只需要在布局之前调用测量函数来获取将要布局的「View的宽度」即可。...在LayoutManager中,并非靠直接调用ItemView的layout函数进行子View的布局,而是使用layoutDecorated与layoutDecoratedWithMargins, 两者的区别是后者考虑了...为了在滑动RecyclerView时有子View移动的效果,需要复写scrollHorizontallyBy函数,并在其中调用offsetChildrenHorizontal(int x)。...在RecyclerView中,需要在滑动、填充可见区域的同时,对不可见区域的子View进行回收,这样才能体现出RecyclerView的优势。 回收的方向与填充的方向恰好相反。...那回收的代码具体如何实现呢?

    3.2K20

    【深入详解】函数栈帧的创建与销毁:寄存器、压栈、出栈、调用、回收空间

    我们将学习函数是怎样向内存申请空间以及在程序结束后又是怎样回收空间的。...; sub:减法指令,用于将两个操作数相减,结果存放于指定的寄存器中; add:加法指令,用于将两个操作数相加,结果存放于指定的寄存器中; call:调用——过程调用,压入返回地址或转入调用函数;...,继续执行调用函数中调用之后的代码,然后我们就回到了call指令的下一条指令的地址, 最终将空间一一回收到操作系统。...因为随机值是我们放进去的,局部变量如果不初始化,因为局部变量来自这里: 这里的值是我们随机放进去的,如果我们初始化,相当于我们把局部变量的随机值覆盖了。 3、函数是怎么进行传参的?...补充: (1)只要函数调用完了,esp、ebp回收了,这些空间就全都还给操作系统了,即使主函数里面指针指向形参的那片空间,也是白指向的,因为空间已经还给操作系统了,我们这里只讨论局部变量(函数内部如果创建了静态变量就是在全局开辟的

    33210

    由旋转画廊,看自定义RecyclerView.LayoutManager

    官方已经提供了几个布局管理器,可以满足大部分需求: LinearLayoutManger:提供了竖向和横向线性布局(可实现ListView功能) GridLayoutManager:表格布局(可实现GridView...LinearLayoutManager与其他几个布局管理器都是继承了该类,从而实现了对每个Item的布局。那么我们也可以通过自定义LayoutManager来实现旋转画廊的效果。...(recycler); layoutItems(recycler, state, SCROLL_RIGHT); //布局Item mRecycle = recycler; //保存回收器...第二个方法:在layoutItem()中 调用了父类方法layoutDecorated对Item进行布局,其中mOffsetAll为整个旋转控件的滑动偏移量。...最后RecyclerView会重新调用onLayoutChildren()进行布局。

    3.4K51

    【Android】ViewPager2与Fragment的组合

    Log.i(TAG, "onPageScrolled: position" + position); } /** * 页面被选中时调用...super.onPageScrollStateChanged(state); } }); } } 1:设置适配器 借鉴之前处理item的思路,利用适配器装view视图...AppcompatActivity (1)createFragment 理解成关联一个Fragment 虽然BlueFragment关联的xml布局中高度设置的为wrap但是viewpager的match_parent会改变我们当前视图的高度...(2)getItemCount 创建几个收纳这样的Fragment的页面 2:设置方向 viewPager.setOrientation(ViewPager2.ORIENTATION_VERTICAL...传参一个接口,重写onCheckedChanged,让勾选的radio作为判定条件,ViewPager随之跳转页面 五:Radio随Pager的改变而改变 //设置注册器页面改变回调提醒:让ViewPager

    49310

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

    把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 类图: 适配器模式也分两种:类适配器模式和对象适配器模式。...,而输入端的类型不可预知 个人理解: 这个模式主要还是用于将两个不兼容的类融合在一起,通过一种转换使得他们能够协作起来。...的使用 mRecyclerView = findViewById(R.id.test); // 设置布局管理器 mRecyclerView.setLayoutManager(mLayoutManager...2、自定义一个列表视图 此部分采用代理模式篇幅中的例子,继续做一个表视图控件。看过那篇文章的朋友可以发现,同样是做一个列表视图,iOS用的是代理模式而Android的设计用的是适配器模式。...简易理解设计模式之:简单工厂模式——来试试接入支付功能 简易理解设计模式之:工厂方法模式——数据存储例子 简易理解设计模式之:抽象工厂模式——更换数据库例子 简易理解设计模式之:建造者模式——学习使用“链式调用

    1.1K10

    Android自定义控件进阶:自定义LayoutManager

    我们需要调用 Recycler的getViewForPosition(int position) 方法来获取; 获取到Item并重新添加了之后,我们还需要对它进行测量,这时候可以调用measureChild...,我们在layout之后,还要把一些不再需要的Items回收,以保证滑动的流畅度; 以上内容出自陈小缘的自定义LayoutManager第十一式之飞龙在天。...() - 1,放心,下面遍历时会判断view是否已溢出屏幕,并及时修正该值并结束布局 mLastVisiPos = getItemCount() - 1; float...recycler.getScrapList().size():" + recycler.getScrapList().size()); return resultDelta; } /** * 回收需回收的...获取到中间 view 的索引值,如果小于等于该索引值则调用 addView(item) ,反之调用 addView(item, 0) ;相关代码如下: private int fillHorizontalLeft

    2.6K00

    Android新组件RecyclerView介绍,其效率更好

    简单来说就是:RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。...viewHolder, int i) { viewHolder.tv.setText(list.get(i)); } @Override public int getItemCount...3、RecyclerView优点和缺点 优点: RecyclerView本身它是不关心视图相关的问题的,由于ListView的紧耦合的问题,google的改进就是RecyclerView本身不参与任何视图相关的问题...更进一步来说就是RecyclerView它只负责回收和重用的工作,这也是它名字的由来。 所有关于布局、绘制和其他相关的问题,也就是跟数据展示相关的所有问题,都被委派给了一些”插件化”的类来处理。...LayoutManager:将每个条目的视图放置于适当的位置。 ItemDecoration:在每个条目的视图的周围或上面绘制一些装饰视图。

    1.9K90
    领券