Android RecyclerView中的项目没有';notifyItemChanged调用后无法正确获取绑定
我的RecyclerView显示如下所示的一系列天数 首先,一切正常(日期、颜色、缩写和透明度设置正确)。当我按下其中一个圆圈时,居中日期的数据应该会改变。它确实如此,除了透明度设置为1(不透明)而不考虑数据。如果滚动一点,直到本应具有透明度的视图被回收,然后返回,透明度将再次正确设置 这是我的RecyclerView适配器:Android RecyclerView中的项目没有';notifyItemChanged调用后无法正确获取绑定,android,android-recyclerview,android-databinding,Android,Android Recyclerview,Android Databinding,我的RecyclerView显示如下所示的一系列天数 首先,一切正常(日期、颜色、缩写和透明度设置正确)。当我按下其中一个圆圈时,居中日期的数据应该会改变。它确实如此,除了透明度设置为1(不透明)而不考虑数据。如果滚动一点,直到本应具有透明度的视图被回收,然后返回,透明度将再次正确设置 这是我的RecyclerView适配器: public class RecyclerViewAdapterDays extends RecyclerView.Adapter<RecyclerViewAda
public class RecyclerViewAdapterDays extends RecyclerView.Adapter<RecyclerViewAdapterDays.ViewHolder> {
private final int[] month;
private final int[] dates;
private final boolean[] weekends;
private final Shift[] shifts;
private int default_background_color;
public RecyclerViewAdapterDays(int[] month, int[] dates, Shift[] shifts, boolean[] weekends) {
this.month = month;
this.dates = dates;
this.shifts = shifts;
this.weekends = weekends;
}
@Override
public RecyclerViewAdapterDays.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
DoubledotLayoutBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.doubledot_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(binding);
default_background_color = parent.getContext().getResources().getColor(R.color.colorPrimaryDark);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
System.out.println("Binding " + position);
System.out.println("Alpha " + (weekends[position] ? 0.2f : 1f));
holder.binding.setShift(shifts[month[position]]);
holder.binding.setDate(String.valueOf(dates[position]));
System.out.println("Date " + (dates[position]));
holder.binding.setDefaultColor(default_background_color);
holder.binding.rootLayout.setAlpha(weekends[position] ? 0.2f : 1f);
holder.binding.executePendingBindings();
}
@Override
public int getItemCount() {
return month.length;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
final DoubledotLayoutBinding binding;
public ViewHolder(DoubledotLayoutBinding itemView) {
super(itemView.getRoot());
binding = itemView;
}
}
}
以及传递给布局的shift类:
public class Shift
{
public String short_name, name, start, end;
public int color, id;
public boolean priority = false;
public boolean defaultShift = false;
Shift() {}
}
您可能还想添加布局。您是否找到了这个问题的答案?我想我也有类似的经历bug@Oblivionkey3遗憾的是,我仍然没有解决这个问题的办法。你能描述一下你的问题吗?也许这会有帮助。我有一个解决这个问题的方法-在
onBindViewHolder
中,我调用holder.setIsRecyclable(false)代码>-这解决了我的问题,尽管这不是一个很好的解决方案,因为它否定了RecyclerView中提供的一个主要优化。您可能还想添加布局。您找到了这个问题的答案吗?我想我也有类似的经历bug@Oblivionkey3遗憾的是,我仍然没有解决这个问题的办法。你能描述一下你的问题吗?也许这会有帮助。我有一个解决这个问题的方法-在onBindViewHolder
中,我调用holder.setIsRecyclable(false)代码>-这解决了我的问题,尽管这不是一个很好的解决方案,因为它否定了RecyclerView中提供的一个主要优化。
public class Shift
{
public String short_name, name, start, end;
public int color, id;
public boolean priority = false;
public boolean defaultShift = false;
Shift() {}
}