Android RecyclerView中的项目没有';notifyItemChanged调用后无法正确获取绑定

Android RecyclerView中的项目没有';notifyItemChanged调用后无法正确获取绑定,android,android-recyclerview,android-databinding,Android,Android Recyclerview,Android Databinding,我的RecyclerView显示如下所示的一系列天数 首先,一切正常(日期、颜色、缩写和透明度设置正确)。当我按下其中一个圆圈时,居中日期的数据应该会改变。它确实如此,除了透明度设置为1(不透明)而不考虑数据。如果滚动一点,直到本应具有透明度的视图被回收,然后返回,透明度将再次正确设置 这是我的RecyclerView适配器: public class RecyclerViewAdapterDays extends RecyclerView.Adapter<RecyclerViewAda

我的RecyclerView显示如下所示的一系列天数

首先,一切正常(日期、颜色、缩写和透明度设置正确)。当我按下其中一个圆圈时,居中日期的数据应该会改变。它确实如此,除了透明度设置为1(不透明)而不考虑数据。如果滚动一点,直到本应具有透明度的视图被回收,然后返回,透明度将再次正确设置

这是我的RecyclerView适配器:

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() {}

}