一、概念介绍:
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)
}
}
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding = null
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 创建绑定类
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// 设置 TextView 的文本
binding.myTextView.setText("Hello, DataBinding!");
}
override fun onDestroy() {
super.onDestroy();
binding = null;
}
}
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>
4、其它使用
//Kotlin 主要在Activity或Fragment中使用:
ActivityMainBinding binding = DataBindingUtil.setContentView(context, R.layout.activity_main);
//获取整体布局view
val view = binding.root
//java 主要在adapter或者自定view中使用绑定
ItemFlowLayoutBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_flow_layout, null, false);
//获取整体布局view
View view = binding.getRoot()
最后
如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。
如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。
欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)
PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题