美文网首页
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