Android開發教程-使用DataBinding(六)RecyclerViewAdapter中的使用

examplecode發表於2018-09-10

本系列目錄

前面我們講到了Data Binding在Activity中的使用在Fragment中的使用,除此之外,Data Binding也可以使用在RecyclerView/AdapterView的Adapter中,本文以RecyclerView為例。

獲取Binding物件

按照通常的做法,我們在Adapter中會定義一個ViewHolder,在此ViewHolder中取得一些佈局View的引用。

使用Data Binding後同樣可以簡化Adapter中的操作。

比如我們新建佈局檔案item_binding.xml:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
</data>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        >

        <TextView
            android:id="@+id/tv_example"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16sp" />

    </LinearLayout>
</layout>

新建後我們會發現IDE會為我們生成一個繫結類ItemBinding.java,此時我們就可以把它定義在ViewHolder中:

如果沒有生成,依然參考 這篇文章

class ItemsHolder extends RecyclerView.ViewHolder {
    ItemBinding binding;

    ItemsHolder(View itemView) {
        super(itemView);
        binding = DataBindingUtil.bind(itemView);
    }
}

覆寫父類方法onCreateViewHolder(),建立ViewHolder

定義好上面的ViewHolder後,我們就覆寫RecyclerView.Adapter的onCreateViewHolder()方法來建立一個ViewHolder:

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
    return new ItemsHolder(v);
}

在onBindViewHolder()方法中使用ItemBinding

上面我們建立好ViewHolder後,我們就可以在這個方法中使用它了,用法就跟之前我們在Activity中和Fragment中一樣了。

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    ItemsHolder vh = (ItemsHolder)holder;
    Item item = getItem(position);
    vh.binding.tvExample.setText(item.getName());
}

總結

下一篇我們將會介紹BindingAdapter的使用,它應用的場景也很多,我們將以ImageView來舉例,大大簡化我們開發中載入網路/本地圖片的重複程式碼(僅需一行程式碼)。


相關文章