近期將會梳理一下JetPack全家桶的使用,包括DataBinding,Room,ViewModel,LiveData,Navigation等。
本來打算先寫DataBinding的使用,沒想到在17年的時候已經寫過了,這裡就補充一點吧,畢竟不是什麼新東西
- Android資料繫結技術一,企業級開發
- Android資料繫結技術二,企業級開發
- Android JetPack~ DataBinding(資料繫結)(一) 整合與使用
- Android JetPack~ LiveData (一) 介紹與使用
- Android JetPack~ ViewModel (一) 介紹與使用
目錄
- 介紹
- 整合到環境
- 在Activity、Fragment中使用
- BindingAdapter的使用
介紹
DataBinding(資料繫結)釋出於2015年的Google I/O大會,旨在減少Android開發中的大量模板程式碼,增加程式碼及邏輯清晰度,提高開發效率和維護效率。
它的好處顯而易見
- 不用再findViewById(),我們直接可以在xml檔案進行屬性賦值
- xml中可完成簡單的邏輯,如@{ xx==null? a ? b}
- View與邏輯程式碼解耦性更高,資料與View雙向繫結,只需關注資料變化即可
- .....
整合到環境
很早的時候是需要加入依賴的,不過現在只需要更新SDK,下載最新的Android Support庫即可。下面依賴僅供參考
配置工程的Gradle
android {
…
dataBinding {
enabled = true
}
}
在Activity、Fragment中使用
使Activity支援DataBinding,在佈局的最外層加入”<layout>”標籤即可,直接加在最外層,不會影響已有的程式碼。
acty_jpack_layout.xml這個檔名隨便起,但是後面會用到(系統會幫我生成ActyJpackLayoutBinding)
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="ceshi"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
在Activity的onCreate方法中
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//透過databinding 把activity和view繫結
ActyJpackLayoutBinding mBinding = DataBindingUtil.setContentView(this,R.layout.acty_jpack_layout);
}
在Fragment中onCreateView方法中
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = ActyJpackLayoutBinding.inflate(inflater);
return mBinding.getRoot();
}
哦,對了,系統還提供其他的用法比如說,在ViewHolder中
class MyHolder extends RecyclerView.ViewHolder {
MyBinding binding;
MyHolder(View view) {
super(view);
binding = DataBindingUtil.bind(view);
}
}
要獲取View的子View可以透過DataBindingUtil.getBinding(sunView);
BindingAdapter的使用
這個方法很好用,使用場景也很廣,比如說業務需要頁面中按鈕需要點選後縮放,抬起後還原。也可以載入圖片時用Glide框架去載入,而我們只需要在xml檔案中加一行程式碼就OK了。好處就是複用性極高,如果要最佳化圖片質量,只需要在ImageBindAdapter中修改,用到的地方自然就成修改後的。
public class ImageBindingAdapter {
@BindingAdapter("imageUrl")
public static void imageUrl(ImageView view, String imageUrl){
RequestOptions options =
new RequestOptions()
.centerCrop()
.dontAnimate();
Glide.with(view)
.load(imageUrl)
.apply(options)
.into(view);
}
}
直接在xml檔案中使用
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
app:imageUrl="@{bean.img}"
/>
結束!!!
這篇寫的很少,主要是之前寫過了,有需要可以結合之前兩篇。