美文网首页
dataBinding和viewBinding的区别

dataBinding和viewBinding的区别

作者: 因为我的心 | 来源:发表于2023-05-30 16:24 被阅读0次

    一、概念介绍:

    1、dataBinding的优点有哪些?

    1、减少代码量:使用数据绑定可以减少代码量,因为不需要手动更新UI,而是通过数据的变化自动更新UI。
    2、提高开发效率:数据绑定可以提高开发效率,因为不需要手动更新UI,开发人员可以更快地完成开发任务。
    3、降低出错率:使用数据绑定可以降低出错率,因为不需要手动更新UI,减少了手动操作的机会,从而减少了出错的可能性。
    4、提高代码可读性:使用数据绑定可以提高代码可读性,因为数据绑定可以将UI和数据分离,使代码更加清晰易懂。
    5、支持MVVM架构:数据绑定是MVVM架构的重要组成部分,可以帮助开发人员更好地实现MVVM架构。
    6、支持双向绑定:数据绑定支持双向绑定,可以使UI和数据之间的同步更加方便和快捷。

    2、viewBinding的优点有哪些?

    1、简化代码:ViewBinding可以自动生成绑定视图的代码,避免手动findViewById的繁琐过程,使代码更加简洁。
    2、安全性高:ViewBinding使用类型安全的方式绑定视图,避免了类型转换错误的问题,提高了代码的安全性。
    3、性能优化:ViewBinding使用了单例模式,避免了重复创建视图对象的问题,提高了应用的性能。
    4、可读性强:ViewBinding使用了命名规范,使代码更加易读易懂,提高了代码的可维护性。
    5、兼容性好:ViewBinding可以与DataBinding、LiveData等其他Android Jetpack组件一起使用,提高了应用的兼容性。

    3、dataBinding和viewBinding的区别?

    dataBinding和viewBinding都是Android中的数据绑定技术,但是它们有以下区别:

    1、作用对象不同:dataBinding主要用于将数据绑定到布局文件中的视图上,而viewBinding主要用于将布局文件中的视图绑定到代码中的View对象上。
    2、使用方式不同:dataBinding需要在布局文件中添加特定的标记和表达式来实现数据绑定,而viewBinding只需要在代码中使用特定的方法来获取绑定的View对象。
    3、支持的最低版本不同:dataBinding需要在Android Studio 1.3及以上版本中使用,而viewBinding需要在Android Studio 3.6及以上版本中使用。
    4、功能不同:dataBinding除了数据绑定外,还支持双向绑定、表达式、事件绑定等功能,而viewBinding只支持视图绑定。
    5、性能不同:dataBinding在数据绑定时需要进行额外的处理,可能会影响性能,而viewBinding只是在初始化时进行视图绑定,对性能影响较小。

    注意:如果没有数据绑定需求,建议使用viewBinding,性能开销比较小。

    二、使用:

    1、dataBinding使用

    1、启用DataBinding

     // 启用DataBinding
     dataBinding {
        enabled true
     }
    

    2、MainActivity3 中绑定

    class MainActivity3 : AppCompatActivity() {
        var binding: ActivityMain3Binding? = null
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //绑定
            binding = ActivityMain3Binding.inflate(layoutInflater)
    
            binding?.tvTitle?.text = "最新赋值的UUUU"
    
            setContentView(binding?.root)
        }
    }
    

    3、activity_main3.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        tools:ignore="MissingDefaultResource">
    
        <data>
        </data>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <TextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="你好啊"
                />
    
        </LinearLayout>
    </layout>
    

    2、viewBinding 在activity中使用

    1、启用ViewBinding

       // 启用ViewBinding
            viewBinding {
                enabled true
            }
    

    2、MainActivity3中使用

    class MainActivity3: AppCompatActivity() {
    
        var binding:ActivityMain3Binding? = null
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivityMain3Binding.inflate(layoutInflater)
            setContentView(binding?.root)
            binding?.tvValue?.text = "我是涛哥啊"
        }
    }
    

    3、activity_main3.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <TextView
            android:id="@+id/tv_value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="默认值"
            />
    </LinearLayout>
    

    3、viewBinding 在fragment中使用

    class BlankFragment2 : Fragment() {
        
        var fb: FragmentBlank2Binding ? = null;
    
        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            // Inflate the layout for this fragment
            // return inflater.inflate(R.layout.fragment_blank2, container, false)
            fb = FragmentBlank2Binding.inflate(layoutInflater)
            fb!!.ff2.text = "PL"
            return fb!!.root
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".BlankFragment2">
        <TextView
            android:id="@+id/ff2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Hello blank fragment" />
    
    </FrameLayout>
    

    相关文章

      网友评论

          本文标题:dataBinding和viewBinding的区别

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