MultiItem進階 使用DataBinding 讓 RecyclerView代碼更簡潔清爽

前言

本文是MultiItem系列的進階文章,講解如何利用 DataBinding改善對MultiItem的開發,其中RecyclerViewAdapterViewHolderManager都不須要編寫,使用庫中封裝的基礎類就能夠完成業務代碼的開發,使你的RecyclerView代碼更加乾淨清爽。
MutliItem主要解決多類型RecyclerView Adapter問題,在正常使用中作到了Adapter零編碼,解放了複雜的Adapter類,提升擴展性。html

源碼地址

Github地址:github.com/free46000/M…,請你們多多關注,更多更新會首先在GitHub上體現,也會在第一時間在本平臺發佈。 java

系列文章

效果截圖

數據綁定效果

用法

開啓數據綁定

build.gradle開啓DataBindingandroid

dataBinding {
    enabled = true
}複製代碼

使用方法

爲數據源註冊ViewHolderManager管理類:git

//初始化adapter
BaseItemAdapter adapter = new BaseItemAdapter();
//綁定寫法一(簡單):直接傳入BR.itemData(VariableId)
adapter.register(TextBean.class, new DataBindViewHolderManager<>(R.layout.item_text_data_bind, BR.itemData));
//綁定寫法二(自由):傳入ItemBindView接口實例,能夠定製綁定業務邏輯
adapter.register(ImageTextBean.class, new DataBindViewHolderManager<>(
        R.layout.item_image_text_data_bind, this::onBindViewHolder));複製代碼

上面代碼中寫法二的實現咱們看到了this::onBindViewHolder這一行代碼,這是使用表達式後的簡寫方式,就是實現了一個ItemBindView接口的實例,onBindViewHolder方法爲接口中具體執行的方法:github

//將數據綁定的視圖中,具體代碼由DataBinding庫自動生成
private void onBindViewHolder(ViewDataBinding dataBinding, Object data) {
    //還能夠寫一些其餘的綁定業務邏輯......
    dataBinding.setVariable(BR.itemData, data);
}複製代碼

經過以上簡單幾行代碼咱們就完成了多類型的RecyclerView列表的代碼,是否是很是乾淨清爽,其中BaseItemAdapterDataBindViewHolderManager都是MultiItem庫中封裝好的基礎類,能夠在業務代碼中直接使用。網絡

DataBinding:ImageView加載網絡URL

這裏使用了DataBindingBindingAdapter註解,能夠爲xml定製一些設值方法,具體使用方式你們能夠參考BindingAdapter的官方文檔
DemoBindingAdapter的定製代碼:佈局

/** * 經過android:imageUrl能夠在xml佈局中直接爲ImageView設置url地址 * * @param imageView xml中ImageView實例 * @param imgUrl 網絡圖片地址 */
@BindingAdapter({"android:imageUrl"})
public static void setImageViewResource(ImageView imageView, String imgUrl) {
    Context context = imageView.getContext();
    //此處經過imgUrl字符串獲取資源ID,你們可根據業務使用第三方庫加載網絡圖片
    int resID = context.getResources().getIdentifier(imgUrl, "drawable", context.getPackageName());
    imageView.setImageResource(resID);
}複製代碼

這樣咱們就能夠經過android:imageUrlxml佈局中直接爲ImageView設置url地址了:post

<ImageView ... android:imageUrl="@{itemData.imgUrl}" />複製代碼

DataBinding優點

DatabindingMVVM模式的基礎,以前也寫了文章咱們爲何要使用DataBinding,裏面經過代碼的對比,總結說明爲何要使用DataBinding的技術,有興趣的同窗能夠閱讀一下,在這裏我把文章裏的一小段總結貼出來:gradle

DataBinding爲數據驅動:數據變化後自動更新UI;事件處理:直接找到目標實例處理用戶操做的事件。這樣咱們就不須要和UI或者控件打交道,只須要在java代碼中處理業務邏輯就行了,很是清晰,其他的統一交給binding庫去完成。下降了代碼耦合度,使得數據獨立於UI,對之後程序的變化和維護都有積極的影響。ui

總結

Databinding拿出來單獨寫了這篇文章,是但願你們對Databinding重視起來,隨着在開發中愈來愈多的使用,你就更能體會到它所帶來的好處,本文主要寫了MultiItemDataBinding的結合,僅涉及了一些Databinding基礎用法,可是也足以對咱們的代碼結構有了很大的提高,若是你們對DataBinding感興趣,歡迎你們多多交流

相關文章
相關標籤/搜索