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

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

为方便理解循环适配器Kotlin编码,下面以微信的公众号消息列表为例,给出对应的消息列表Kotlin代码: //ViewHolder构造时初始化布局的控件对象 class RecyclerLinearAdapter...这下不管是Activity代码,还是适配器代码,均可将控件名称拿来直接调用了。...依照三个要素的三种处理对策,进而提炼出来了循环适配器的通用类RecyclerCommonAdapter,详细的Kotlin代码示例如下: //循环视图通用适配器 //具体业务中会变化的三类要素抽取出来...,作为外部进来的变量。...至此本节的适配器实现过程终于落下帷幕,一路上可谓是过五关斩六,硬生生把数十行的Java代码压缩到不到十行的Kotlin代码,经过不断迭代优化方取得如此彪炳战绩。

1.8K41

【Jetpack】DataBinding 架构组件 ⑥ ( RecyclerView 数据绑定 )

一、RecyclerView 数据绑定核心要点 1、启用数据绑定 / 导入依赖 RecyclerView , 如果要使用 DataBinding 架构组件进行数据绑定 , 首先要 启用 DataBinding...ItemBinding 类 , 数据绑定在该布局类即可 ; 3、自定义 RecyclerView.Adapter 适配器要点 ( 本博客重点 ★ ) 自定义 RecyclerView.Adapter...适配器 , 需要 实现对 RecyclerView 条目 DataBinding 布局 的 数据绑定 ; 首先 , 自定义 RecyclerView.ViewHolder 类 , 在其中维护 item.xml...类重写的 onBindViewHolder 函数 , 为每个列表条目设置数据 ; 先通过参数的 MyViewHolder 对象获取其中的 ItemBinding 数据绑定布局对象 ; 之后为 holder.itemBinding...RecyclerView.Adapter DataBinding 布局 是 RecyclerView 条目的布局 , 需要 自定义 RecyclerView.Adapter , 为每个条目布局都绑定一个

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

Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin

,不过就怕写了没有人看,因为国内Kotlin是受众群体确实比较少,当然了也是有大的方向往这边推动的,但是小公司依然不会去用Kotlin,如果你看不惯我这个说法也不要告诉我。...所以Kotlin我想到了更简单的办法,直接在MainActivity修改状态栏样式。...而Kotlin的语法可以让你把构造方法的参数作为类参数使用,这样解释不知道是不是对的,这里了一个布局id和数据源。...,第二行没有给,这是因为Kotlin只要一开始做了处理之后后面就可以不用再次处理,当然你加上!!也没有问题。...MainActivity的方法,MainActivity写入,或者Alt+Enter ?

4.3K20

Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin

所以Kotlin我想到了更简单的办法,直接在MainActivity修改状态栏样式。...在上面的代码DeviceAdapter继承了BaseQuickAdapter,这一点和Java的相似,如下图所示 [在这里插入图片描述] 而Kotlin的语法可以让你把构造方法的参数作为类参数使用,这样解释不知道是不是对的...,这里了一个布局id和数据源。...,第二行没有给,这是因为Kotlin只要一开始做了处理之后后面就可以不用再次处理,当然你加上!!也没有问题。...bluetoothClass.majorDeviceClass, icon) 这行代码调用**getDeviceType**方法,传入两个参数,这两个参数都已经做了非空的处理,所以getDeviceType

3.9K10

Jetpack新成员,Paging3从吐槽到真香

然后load()函数当中,先通过params参数得到key,这个key就是代表着当前的页数。注意key是可能为null的,如果为null的话,我们就默认当前页数设置为第一页。...但是这里又额外调用了一个cachedIn()函数,这是用于服务器返回的数据viewModelScope这个作用域内进行缓存,假如手机横竖屏发生了旋转导致Activity重新创建,Paging 3就可以直接读取缓存的数据...接下来定义RecyclerView适配器,但是注意,这个适配器也比较特殊,必须继承自PagingDataAdapter,代码如下所示: class RepoAdapter : PagingDataAdapter...第一点,我们使用Kotlin的高阶函数来给重试按钮注册点击事件,这样当点击重试按钮时,构造函数传入的函数类型参数就会被回调,我们待会将在那里加入重试逻辑。...另外注意这里使用Lambda表达式来作为传递给FooterAdapter的函数类型参数Lambda表示式,调用RepoAdapter的retry()函数即可重新加载。

2.4K20

ViewBinding 与 Kotlin 委托双剑合璧

我从多个维度对比它们的区别: 角度 findViewById ButterKnife Kotlin Synthetics DataBinding ViewBinding ❓ 简洁性 ✖ ✖ ✔ ✔ ✔...ViewBinding 与 Kotlin 委托双剑合璧 到这里,ViewBinding 的使用教程已经说完了。但是回过头看,有没有发现一些局限性呢?...那么,有没有可优化的方案呢?我们想起了 Kotlin 属性委托,关于 Kotlin 委托机制我之前的一篇文章里讨论过:Kotlin | 委托机制 & 原理[7]。...第一个类型参数 F 是属性所有者,第二个参数 V 是属性类型,因为我们 Fragment 定义属性,属性类型为 ViewBinding,所谓定义类型参数为 <in F : Fragment, out...Kotlin 高阶函数,可以把 lambda 表达式直接作为参数传递,其中 View 是函数参数,而 T 是函数返回值。lambda 表达式本质上是 「可以作为值传递的代码块」。

1.6K20

【翻译】Kotlin 1.1 新版本同样适合安卓开发者

再也不要管理那些 lambda 表达式不需要使用的变量了 有一种常见的情形就是:我们 lambda 表达式中所定义的参数到最后都不能派上用场。...这是因为 Kotlin 1.0 版本我们没有一种有效的方式来抛弃那些不需要使用的参数。...举个例子,文章的前面我解释了如何使用代理更新一个 RecyclerView适配器,后面的代码是这样的: var items: List by Delegates.observable...如果你的 lambda 表达式中有多个参数,尽管你不会使用但是你必须全部写出来。...现在,你不需要去判断哪些参数用了哪些没用。这真是一清二楚! 协程 Kotlin 1.1 协程是一个令人振奋的新闻。

1.1K60

安卓天气预报app(三)——城市管理、数据库操作

数据,这不就弥补了我们定位方面的缺陷了吗,那么很好,当我们加上参数之后(此api根据城市查询的参数需+&city=(城市名称))那么,当我们只加了参数却没有加参数值(&city=)他还是会根据当前位置进行定位...位置商丘的信息成功插入,插入之后,后续要进行的操作就是实时更新数据库 涉及内容 SQLite数据库操作,创建数据库,新建表,增删查改操作 适配器adapter添加点击事件 页面值跳转项目结构... 适配器就是决定在此城市管理页面的RecyclerView展示哪个页面,跟之前一样,前几篇文章都有篇幅概括,基本的一些操作就是, 添加一个构造方法...来绑定控件,此时城市管理页面要求点击某个城市,需要值到MainActivity,并获取指定点击城市的天气信息 所以适配器添加一个点击事件,首先在适配器添加接口 public interface...OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } 然后适配器的类

1.5K30

Android MVI框架搭建与使用

二、网络请求   当我们使用Kotlin时,网络访问就变得更简单了,只需要Retrofit和协程即可,首先我们com.llw.mvidemo包下新建一个data包,然后data包下新建一个model...作为网络接口请求的地址头,然后构建了MoShi,通过MoShi去进行JSON转Kotlin数据类的处理,之后就是构建Retrofit,MoShi设置进去,最后就是通过Retrofit创建一个网络请求服务...① 列表适配器   创建适配器之前首先我们需要创建一个适配器所对应的item布局,layout下新建一个item_wallpaper_rv.xml,代码如下图所示: <?...initView()函数是控件的一些配置,比如给RecyclerView添加布局管理器和设置适配器,给按钮添加点击事件,点击的时候发送意图,发送的意图被MainViewModelmainIntentChannel...observeViewModel()函数是对状态的收集,状态为Loading,隐藏按钮,显示加载条,然后网络请求会有结果,如果是成功,则在UI上隐藏按钮和加载条,显示列表控件,并添加数据到适配器

3.1K40

深入浅出 RecyclerView

其中 StaggeredGridLayoutManager 第一个参数表示列数,就好像 GridView的列数一样,第二个参数表示方向,可以很方便的实现横向滚动或者纵向滚动。...ListView设置 divider 非常简单,只需要在 XML 文件设置就可以了,同时还可以设置 divider 高度。...但是,与 ListView 不同的是,ListView 的适配器是直接返回一个 View,这个 View 加入到 ListView 内部。...而 RecyclerView 是返回一个 ViewHolder 并且不是直接这个 holder 加入到视图内部,而是加入到一个缓存区域,视图需要的时候去缓存区域找到 holder 再间接的找到 holder...但是有一点, RecycledView 内部的这个第二级缓存池RecycledViewPool 是可以被多个 RecyclerView 共用的,这一点比起直接缓存 View 的 ListView 就要高明了很多

1.7K60

RecyclerView必知必会

runPendingAnimations(): RecyclerView动画的执行方式并不是立即执行,而是每帧执行一次,比如两帧之间添加了多个Item,则会将这些将要执行的动画Pending住,保存在成员变量...这些方法的内部实际上并不是书写执行动画的代码,而是需要执行动画的Item全部存入成员变量,并且返回值为true,然后runPendingAnimations()中一并执行。...runPendingAnimations(),animateAddImpl()是执行add动画的具体方法,其实就是itemView的透明度从0变到1(animateAdd()已经view的透明度变为...是创建Adapter时实现OnStartDragListener接口的Activity对象作为参数进来。...mRecyclerPool: 缓存池,多个RecyclerView共用。

4.6K20

实战 | 认识 RecyclerView

实现的过程,我也会将 RecyclerView 的每个部分揉碎了展现给大家,这样大家就可以自己的应用实现了。 RecyclerView 是 "何方神圣"?为什么选择它呢?...下面的代码会使用 Kotlin 语言,但是 RecyclerView 也可以 Java 语言中使用。...设置项目名称,并且选择 Kotlin 作为项目所用的语言。 接下来 app 级的 build.gradle 文件里引入 最新版本 的 RecyclerView 依赖。...Adapter 类从数据源获得数据,并且数据传递给正在更新其所持视图的 ViewHolder。下图显示了 RecyclerView、Adapter、ViewHolder 和数据之间的协作关系。...更新 FlowerAdapter 的类定义,使其继承 RecyclerView.Adapter 类,并且 FlowerViewHolder作为参数传入。

1.1K30

RecyclerView 必知必会

这些方法的内部实际上并不是书写执行动画的代码,而是需要执行动画的Item全部存入成员变量,并且返回值为true,然后runPendingAnimations()中一并执行。...为了防止执行add动画时外面有新的add动画添加到mPendingAdditions,从而导致执行add动画错乱,这里mPendingAdditions的内容移动到局部变量additions,然后遍历...runPendingAnimations(),animateAddImpl()是执行add动画的具体方法,其实就是itemView的透明度从0变到1(animateAdd()已经view的透明度变为...其中mListener是创建Adapter时实现OnStartDragListener接口的Activity对象作为参数进来。...mRecyclerPool: 缓存池,多个RecyclerView共用。

4.1K90

当大潮退去没有谁还能Android这行“裸泳”,10家大厂面试题,掌握这些让你轻松面试

9.kotlin ?的原理 10.项目中有直接使用tcp,socket来发送消息吗 11.如何在网络框架里直接避免内存泄漏,不需要在presenter释放订阅 12.生命周期都是通过什么调用的?...方法参数?...11.kotlin lazy使用,lazy viewmodel 12.有没有看一下Google官方的ViewModel demo 13.ViewModelActivity初始化与Fragment初始化...9.一个wrap_content的ImageView,加载远程图片,什么参数裁剪比较好? 10.两个getDrawable取得的对象,有什么区别? 11.补间动画与属性动画的区别,哪个效率更高?...有没有精确测量的工具? 6.kotlinc与javac编译字节码有什么区别? 7.你团队是怎样一个角色? 8.你有没有做什么推进项目的工作 9.说说热修复的原理?

97720

RecyclerView获取点击位置的接口被废弃了?

多个adapter嵌套让我容易联想到RecyclerView嵌套RecyclerView,但是好像Google长久以来并不推荐这种做法,更不太可能为这种做法废弃API。...不过MergeAdapter是RecyclerView 1.2.0版本才新增的,而官网目前RecyclerView的最新稳定版本还是1.1.0。...它的主要作用很简单,就是多个Adapter合并到一起。 你可能会说,为什么我的RecyclerView里面会有多个Adapter呢?那是因为你或许还没有遇到过这样的需求,而我就遇到了。...可能你没有想到这个界面会是一个RecyclerView,但是它确实就是如此,界面的内容主要分成了如上图所示的3部分。 那么一个RecyclerView怎么能显示3种完全不同的内容呢?...最后,MergeAdapter设置到RecyclerView当中,整个过程结束。 是不是非常简单?几乎和之前RecyclerView的用法没有任何区别。 现在运行一下程序,效果如下图所示: ?

4.3K43

RecyclerView 必知必会

这些方法的内部实际上并不是书写执行动画的代码,而是需要执行动画的Item全部存入成员变量,并且返回值为true,然后runPendingAnimations()中一并执行。...为了防止执行add动画时外面有新的add动画添加到mPendingAdditions,从而导致执行add动画错乱,这里mPendingAdditions的内容移动到局部变量additions,然后遍历...runPendingAnimations(),animateAddImpl()是执行add动画的具体方法,其实就是itemView的透明度从0变到1(animateAdd()已经view的透明度变为...其中mListener是创建Adapter时实现OnStartDragListener接口的Activity对象作为参数进来。...mRecyclerPool: 缓存池,多个RecyclerView共用。

2.5K70

RecyclerView】 十三、RecyclerView 数据更新 ( 移动数据 | 数据改变 )

和 toPosition 这 2 个元素 , 其它元素不变 ; 代码示例 : 先移除第 0 个元素 , 然后第 7 位置插入相同的数据 , 相当于第 0 个数据移动到了第 7 位置...: int positionStart 参数 : 被修改的元素原数据集中首个元素的位置索引 ; int itemCount 参数 : 数据集中被修改元素个数 ; 注意 : 该方法不指定数据集发生了哪些变化...(int position) 函数原型 : 该函数定义 RecyclerView 的内部类 Adapter ; public class RecyclerView extends ViewGroup...从布局获取 RecyclerView RecyclerView recycler_view = findViewById(R.id.recycler_view); /...View.OnClickListener() { @Override public void onClick(View v) { // 集合开始添加多个元素

3.2K00

RecyclerView滑动时卡顿怎么办?

这个可以开发者选项中看到:调试GPU过度绘制。 我们对于滚动过程,卡顿的判断可以打开手机开发者选项的:GPU呈现模式分析->屏幕上显示为条形图。...就可以非常直观的看到滑动过程中有没有卡顿了。...3.优化图片加载 我别的文章中看到并且用在了自己的软件,图片加载的优化是最有效的办法,而且很多主流的app中新浪微博,qq,今日头条等也使用,因为列表滚动过程,如果布局很复杂,样式也很多,那就需要考虑滚动的时候不做复杂布局及图片的加载...newState)回调两个变量: recyclerView : 当前滚动的RecyclerView newState : 当前滚动状态....有问题去解决,总归RecyclerView是非常棒的控件,值得去学习,使用。 大家有什么问题可以留言,一起学习交流,或者有什么更好的办法,欢迎分享。

3.1K20
领券