ViewBinding与RecycleView(一)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ViewBinding与RecycleView(一)相关的知识,希望对你有一定的参考价值。
参考技术A 在android Studio 3.6的稳定版本中,我们就可以使用ViewBinding替代 findViewById官方介绍
另外关于 ViewBinding 与 Kotlin Android Extensions 的区分这里不多做介绍,
可以参考下 stackoverflow中的讨论
ViewBinding如何使用?如果是Kotlin DSL的话这样添加:
否则:
然后在activity中:
在 app/buildle/generated/data_binding_base_class_source_out/... 目录看下生成的 ActivityTabBinding 类
关注下 ActivityTabBinding 类中的 inflate 方法是不是跟我们RecycleView中的 onCreateViewHolder 方法特别像?创建 View root 时都不会将其添加到父对象 ViewGroup 上,一般我们创建 ViewHolder 像这样:
所以我们可以给自定义ViewHolder类传入ViewBinding引用 :
我们再给ViewGroup提供一个扩展方法省去ViewHolder在 onCreateViewHolder 中的创建 :
利用ViewBinding 一个简单的Adapter就这样:
CategoryItemBinding 是根据xml文件自动生成的
综上,这些是比较简单的操作..
kotlin源码中的实现判空的委托属性:
其中 NotNullVar 继承了 ReadWriteProperty,并实现了他的两个方法,而Delegates.notNull() 属于委托属性。
看一个自定义委托findViewById的例子:
如果我们把itemView与数据源的绑定通过自定义委托来代理,那是不是会方便很多??
简单说就是在一个map里存储属性的值,可以使用映射实例自身作为委托来实现委托属性。例如json解析
那itemView的setTag与getTag是否可以放在MutableMap中进行处理?
adapter中还有大量工作需要去做,比如itemView的setTag、OnClickListener()、ViewHolder中进行数据源与itemView的绑定,那么如何利用kotlin特性将这些行为进一步抽取?......
以上是关于ViewBinding与RecycleView(一)的主要内容,如果未能解决你的问题,请参考以下文章
Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions
Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions
Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions
Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions