Работа с данными в RecyclerView происходит через класс адаптер. Вот когда-то накидал простенький абстрактный адаптер, когда тестировал data binding:
public abstract class AbstractRecyclerAdapter<E> extends
RecyclerView.Adapter<AbstractRecyclerAdapter.BindingHolder> {
private List<E> mElements;
public AbstractRecyclerAdapter() {
mElements = new ArrayList<>();
}
public abstract int getItemLayoutId();
public abstract int getVariableId();
public void setElements(List<E> elements) {
mElements = elements;
}
@Override
public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(getItemLayoutId(),
parent, false);
return new BindingHolder(v);
}
@Override
public void onBindViewHolder(BindingHolder holder, int position) {
final E element = mElements.get(position);
holder.getBinding().setVariable(getVariableId(), element);
holder.getBinding().executePendingBindings();
}
@Override
public int getItemCount() {
return mElements.size();
}
public static class BindingHolder extends RecyclerView.ViewHolder {
private ViewDataBinding binding;
public BindingHolder(View itemView) {
super(itemView);
binding = DataBindingUtil.bind(itemView);
}
public ViewDataBinding getBinding() {
return binding;
}
}
}
Пример реализации для класса History:
public class HistoryRecyclerAdapter<History> extends AbstractRecyclerAdapter<History> {
public HistoryRecyclerAdapter() {
super();
}
@Override
public int getItemLayoutId() {
return R.layout.item_history;
}
@Override
public int getVariableId() {
return BR.history;
}
}
Добавляете и изменяете элементы в списке с помощью setElements() и notifyDataSetChanged():
mRecyclerAdapter.setElements(getData());
mRecyclerView.setAdapter(mRecyclerAdapter);
mRecyclerAdapter.notifyDataSetChanged();
Ну и в разметке вашего item_history должно быть объявление variable history с прочими биндингами:
...
<data>
...
<variable
name="history "
type="History " />
...
</data>
...