Android开发教程 - 使用Data Binding(六)RecyclerView Adapter中的使用

本系列目录

前面我们讲到了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来举例,大大简化我们开发中加载网络/本地图片的重复代码(仅需一行代码)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML文件使用RecyclerView、ViewHolder和Adapter的步骤和Java代码类似,只需要在XML文件定义RecyclerView、ViewHolder和Adapter即可。 ViewHolder的实现: ``` <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="text" type="String" /> </data> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{text}" /> </layout> ``` 在这个示例,我们使用AndroidData Binding功能,定义了一个包含一个TextView的布局文件,并将TextView的文本绑定到一个字符串变量Adapter的实现: ``` public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { ViewDataBinding binding = DataBindingUtil.inflate( LayoutInflater.from(parent.getContext()), R.layout.item_view, parent, false ); return new MyViewHolder(binding); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.bind(mData.get(position)); } @Override public int getItemCount() { return mData.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { private ViewDataBinding mBinding; public MyViewHolder(ViewDataBinding binding) { super(binding.getRoot()); mBinding = binding; } public void bind(String text) { mBinding.setVariable(BR.text, text); mBinding.executePendingBindings(); } } } ``` 在这个示例,我们使用AndroidData Binding功能,定义了一个包含一个TextView的ViewHolder,并将ViewHolder的视图绑定到一个布局文件。我们还创建了一个Adapter,它管理一个字符串列表,并将每个字符串绑定到ViewHolder的TextView。 最后,我们需要将Adapter设置到RecyclerView: ``` <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:adapter="@{adapter}" /> ``` 在这个示例,我们在XML文件定义了一个RecyclerView,并将LayoutManager和Adapter设置到RecyclerView,其Adapter使用Data Binding功能。 这样就可以显示一个简单的RecyclerView了。当我们滚动列表时,RecyclerView会自动回收不再需要的视图,并将它们重新用于新的列表项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值