一、概念介紹:
1费彼、dataBinding的優(yōu)點有哪些滑臊?
1、減少代碼量:使用數據綁定可以減少代碼量箍铲,因為不需要手動更新UI雇卷,而是通過數據的變化自動更新UI。
2颠猴、提高開發(fā)效率:數據綁定可以提高開發(fā)效率聋庵,因為不需要手動更新UI,開發(fā)人員可以更快地完成開發(fā)任務芙粱。
3、降低出錯率:使用數據綁定可以降低出錯率氧映,因為不需要手動更新UI春畔,減少了手動操作的機會,從而減少了出錯的可能性。
4律姨、提高代碼可讀性:使用數據綁定可以提高代碼可讀性振峻,因為數據綁定可以將UI和數據分離,使代碼更加清晰易懂择份。
5扣孟、支持MVVM架構:數據綁定是MVVM架構的重要組成部分,可以幫助開發(fā)人員更好地實現MVVM架構荣赶。
6凤价、支持雙向綁定:數據綁定支持雙向綁定,可以使UI和數據之間的同步更加方便和快捷拔创。
2利诺、viewBinding的優(yōu)點有哪些?
1剩燥、簡化代碼:ViewBinding可以自動生成綁定視圖的代碼慢逾,避免手動findViewById的繁瑣過程,使代碼更加簡潔灭红。
2侣滩、安全性高:ViewBinding使用類型安全的方式綁定視圖,避免了類型轉換錯誤的問題变擒,提高了代碼的安全性君珠。
3、性能優(yōu)化:ViewBinding使用了單例模式赁项,避免了重復創(chuàng)建視圖對象的問題葛躏,提高了應用的性能。
4悠菜、可讀性強:ViewBinding使用了命名規(guī)范舰攒,使代碼更加易讀易懂,提高了代碼的可維護性悔醋。
5摩窃、兼容性好:ViewBinding可以與DataBinding、LiveData等其他Android Jetpack組件一起使用芬骄,提高了應用的兼容性猾愿。
3、dataBinding和viewBinding的區(qū)別账阻?
dataBinding和viewBinding都是Android中的數據綁定技術蒂秘,但是它們有以下區(qū)別:
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);
// 創(chuàng)建綁定類
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()