Android: RecyclerView的绑定
Android: binding of RecyclerView
我在 RecyclerView 中做了一个简单的绑定。
我这样创建了 ViewHolder:
class ItemViewHolder extends RecyclerView.ViewHolder{
ItemBinding binding;
public ItemViewHolder(View itemView) {
super(itemView);
binding = DataBindingUtil.bind(itemView);
}
}
绑定是这样完成的
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
MyItem item= items.get(position);
// bind model with data
holder.binding.setItem(item);
}
看了this教程,看到ViewHolder是这样的:
public class MyViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
private final ViewDataBinding binding;
public MyViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(Object obj) {
binding.setVariable(BR.obj,obj);
binding.executePendingBindings();
}
}
适配器是
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
final TemperatureData temperatureData = data.get(position);
holder.bind(temperatureData);
}
我的问题是如果没有它也能工作,为什么我们需要 public void bind(Object obj)
方法?
我的代码比较少,而且可以正常工作,但是我是新手 Android 我害怕错过一些东西。
此方法确保为任何 class 生成 setters。
但在大多数情况下,这不是必需的。
所以是的,你可以删除这个方法——这里可能发生的最糟糕的事情是你向你的应用程序添加了一个 class 而 setter 不会生成(此时你知道在哪里寻找解决方案)
我在 RecyclerView 中做了一个简单的绑定。
我这样创建了 ViewHolder:
class ItemViewHolder extends RecyclerView.ViewHolder{
ItemBinding binding;
public ItemViewHolder(View itemView) {
super(itemView);
binding = DataBindingUtil.bind(itemView);
}
}
绑定是这样完成的
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
MyItem item= items.get(position);
// bind model with data
holder.binding.setItem(item);
}
看了this教程,看到ViewHolder是这样的:
public class MyViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
private final ViewDataBinding binding;
public MyViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(Object obj) {
binding.setVariable(BR.obj,obj);
binding.executePendingBindings();
}
}
适配器是
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
final TemperatureData temperatureData = data.get(position);
holder.bind(temperatureData);
}
我的问题是如果没有它也能工作,为什么我们需要 public void bind(Object obj)
方法?
我的代码比较少,而且可以正常工作,但是我是新手 Android 我害怕错过一些东西。
此方法确保为任何 class 生成 setters。
但在大多数情况下,这不是必需的。
所以是的,你可以删除这个方法——这里可能发生的最糟糕的事情是你向你的应用程序添加了一个 class 而 setter 不会生成(此时你知道在哪里寻找解决方案)