美文网首页
JetPack<第六篇>:ViewBinding

JetPack<第六篇>:ViewBinding

作者: NoBugException | 来源:发表于2022-08-15 13:45 被阅读0次
一、配置支持
viewBinding{
    enabled = true
}

或者

buildFeatures {
    viewBinding true
} 
二、和DataBinding比较

【1】ViewBinding的特点

仅仅支持绑定 View
不需要在布局文件中添加 layout 标签
需要在模块级 build.gradle 文件中添加 viewBinding = true 即可使用
效率高于 DataBinding,因为避免了与数据绑定相关的开销和性能问题
相比于 kotlin-android-extensions 插件避免了空异常

【2】DataBinding的特点

包含了 ViewBinding 所有的功能
需要在模块级 build.gradle 文件内添加 dataBinding = true 并且需要在布局文件中 
添加 layout 标签才可以使用
支持 data 和 view 双向绑定
效率低于 ViewBinding,因为注释处理器会影响数据绑定的构建时间。
三、ViewBinding 的使用

如果不想为某个布局生成 binding 类,将下面属性添加到布局文件的根视图中

<LinearLayout tools:viewBindingIgnore="true" >
</LinearLayout>

在 Activity 中使用:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
}

在 Fragment 中使用:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, 
savedInstanceState: Bundle?): View {
    val binding = FragmentViewBindBinding.inflate(inflater,container,false)
    return binding.root
}

在 Adapter 中的使用:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): 
RecyclerView.ViewHolder {
    RecycleItemProductBinding.inflate(LayoutInflater.from(parent.context), parent, false)
}

在 Dialog 中使用:

override fun onCreate(savedInstanceState: Bundle?) {
    binding = DialogAppBinding.inflate(layoutInflater)
    setContentView(binding.root)
}

include 标签的使用:

include 标签不带 merge 标签,需要给 include 标签添加 id, 直接使用 id 即可,用法如下所示:

<include
    android:id="@+id/include"
    layout="@layout/layout_include_item" />

binding.include.includeTvTitle.setText("")


include 标签带 merge 标签,注意这里和 DataBinding 用法不一样,给 include 标签添加 id,在 DataBinding 中可以直接使用 id,
ViewBinding 则不行,ViewBinding 的用法如下所示:

<include layout="@layout/layout_merge_item" />

val mergeItemBinding = LayoutMergeItemBinding.bind(binding.root)
mergeItemBinding.mergeTvTitle.setText("")

ViewStub 标签的使用:

<ViewStub
    android:id="@+id/stub"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout="@layout/view_stub" />

binding.stub.setOnInflateListener { stub, inflated ->
    // ViewBinding
    val viewStub: ViewStubBinding = ViewStubBinding.bind(inflated)
    viewStub.tvTitle.setText("")
}
   
if (!binding.stub.isInflated) {
    binding.stub.viewStub!!.inflate()
}  

[本章完...]

相关文章

网友评论

      本文标题:JetPack<第六篇>:ViewBinding

      本文链接:https://www.haomeiwen.com/subject/wwvkgrtx.html