Мне интересно, как сделать Databinding
и RecyclerView
работать вместе. У меня есть класс адаптера определяется следующим образом:Databinding и RecyclerView в приложении для Android
public class RestaurantRecyclerViewAdapter extends RecyclerView.Adapter<RestaurantRecyclerViewAdapter.BindingHolder> {
private RestaurantsListViewModel mDataContext;
public RestaurantRecyclerViewAdapter(RestaurantsListViewModel vm) {
mDataContext = vm;
}
@Override
public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_restaurant_list_item, parent, false);
BindingHolder holder = new BindingHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final BindingHolder holder, int position) {
final RestaurantListItemViewModel restaurant = mDataContext.getRestaurant(position);
holder.getBinding().setVariable(BR.restaurant, restaurant);
holder.getBinding().executePendingBindings();
}
@Override
public int getItemCount() {
return mDataContext.getRestaurantsCount();
}
public class BindingHolder extends RecyclerView.ViewHolder {
private ViewDataBinding binding;
public BindingHolder(View rowView) {
super(rowView);
binding = DataBindingUtil.bind(rowView);
}
public ViewDataBinding getBinding() {
return binding;
}
}
}
Если RestaurantListViewModel
обновляется с новыми ресторанами Я хотел бы RecyclerView
вновь вынести эти новые объекты. Как я могу это сделать?
EDIT:
@Vladimirs подход представляется разумным, однако у меня возникают проблемы, реализующий метод onBindViewHolder
:
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
final RestaurantListItemViewModel restaurant = restaurants.get(position);
holder.getBinding().setVariable(BR.restaurant, restaurant);
holder.getBinding().executePendingBindings();
}
Теперь нет getBinding
метода.
Я немного смущен. Где я должен поместить метод 'setItems'? –
В любом классе вы хотели бы. Я создал класс RecyclerViewAdapters и поместил туда эту функцию. Я попробовал себя сейчас, посмотрю обновленную вторую часть вопроса. Он работает как шарм, не нужен xml, просто передайте свой ObservableList конструктору. –
Следующий вопрос - мне нужно переопределить метод 'onBindViewHolder', однако я не знаю, как это сделать, используя ваш подход. Взгляните на мой обновленный вопрос. –