3
Databinding
とRecyclerView
を連携させる方法が不思議です。私は次のようにアダプタクラスが定義されている:私は再レンダリングこれらの新しいオブジェクトにRecyclerView
を希望アンドロイドアプリのデータバインディングとリサイクルビュー
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
場合には、いくつかの新しいレストランで更新されます。どうすればそれを達成できますか?
EDIT:
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
方法がありません:
@Vladimirsアプローチしかし、私はトラブルonBindViewHolder
メソッドを実装したんだ、賢明なようです。
私は少し混乱しています。 'setItems'メソッドはどこに置くべきですか? –
あなたが望むどんなクラスでも。私は、RecyclerViewAdaptersというクラスを作成し、そこに関数を配置しました。私は今自分自身を試して、質問の更新された第二部分を参照してください。それは魅力のように動作し、XMLの必要はありません。あなたのObservableListをコンストラクタに渡すだけです。 –
次の質問 - メソッド 'onBindViewHolder'をオーバーライドする必要がありますが、私はあなたのアプローチを使用してこれを行う方法がわかりません。私の更新された質問を見てください。 –