Android開發教程 - 使用Data Binding(六)RecyclerView Adapter中的使用
前面我們講到了Data Bindingofollow,noindex">在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()); }