近期將會梳理一下JetPack全家桶的使用,包括DataBinding,Room,ViewModel,LiveData,Navigation等。
本來打算先寫DataBinding的使用,沒想到在17年的時候已經寫過了,這裡就補充一點吧,畢竟不是什麼新東西
DataBinding(資料繫結)釋出於2015年的Google I/O大會,旨在減少Android開發中的大量模板程式碼,增加程式碼及邏輯清晰度,提高開發效率和維護效率。
它的好處顯而易見
很早的時候是需要加入依賴的,不過現在只需要更新SDK,下載最新的Android Support庫即可。下面依賴僅供參考
android {
…
dataBinding {
enabled = true
}
}
<?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>
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//通過databinding 把activity和view繫結
ActyJpackLayoutBinding mBinding = DataBindingUtil.setContentView(this,R.layout.acty_jpack_layout);
}
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);
這個方法很好用,使用場景也很廣,比如說業務需要頁面中按鈕需要點選後縮放,擡起後還原。也可以載入圖片時用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}"
/>
結束!!!
這篇寫的很少,主要是之前寫過了,有需要可以結合之前兩篇。