Android : Generic Recyclerview Adapter With Data Binding
I have tried to create a generic Recyclerview adapter as below: BaseRecyclerAdapter: public class BaseRecyclerAdapter, EVH extends BaseVie
Solution 1:
What I wanted: I needed Model to be passed to Layout, obviously We needed to use its properties to bind. This is why I thought of making BaseViewHolder a generic class.
Actual Problem: You cannot get Class of Generic Class. Means, I cannot initialise BaseRecyclerAdapter as below:
privateBaseRecyclerAdapter1<Model, EmptyViewHolder, ModelViewHolder> baseRecyclerAdapter1 = new BaseRecyclerAdapter1<>(R.layout.layout_empty, EmptyViewHolder<Model>.class, R.layout.list_item, ModelViewHolder<Model>.class);
Answer : Thanks to data binding. <variable />
tag does the type casting for you.
publicclassBaseViewHolderextendsRecyclerView.ViewHolder {
private final ViewDataBinding binding;
publicBaseViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
publicvoidbind(Objectobject) {
binding.setVariable(BR.obj, object);
binding.executePendingBindings();
}
}
So, now I can initialise BaseRecyclerAdapter as:
private BaseRecyclerAdapter1<Model, EmptyViewHolder, ModelViewHolder> baseRecyclerAdapter1 = new BaseRecyclerAdapter1<>(R.layout.layout_empty, EmptyViewHolder.class, R.layout.list_item, ModelViewHolder.class);
In layout:
<?xml version="1.0" encoding="utf-8"?><layoutxmlns:android="http://schemas.android.com/apk/res/android"><data><importtype="android.view.View" /><variablename="obj"type="com.xxx.Model" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"></LinearLayout></layout>
Happy Coding..!!
Post a Comment for "Android : Generic Recyclerview Adapter With Data Binding"