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(一)的主要内容,如果未能解决你的问题,请参考以下文章

ViewBinding和DataBinding的理解和区别

如何将 ViewBinding 与抽象基类一起使用

Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions

Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions

Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions

Android开发:关于Databinding与Viewbinding以及kotlin-android-extensions