Цвет фона элемента RecyclerView не обновляется должным образом

У меня есть просмотрщик для показа столов в ресторане, если у стола активный заказ, тогда я устанавливаю цвет фона на Янтарный. Более того, если я нажму на любую таблицу, ее фон должен стать серым (для этого я использую setSelected). Для некоторых элементов он работает нормально, но для некоторых фон элемента recyler становится янтарным, даже если у него нет ActiveOrder. Это происходит для столов рядом со столом, который на самом деле имеет активный порядок. Я не уверен, почему это происходит.

OnBindViewMethod:

public void onBindViewHolder(TableItemViewHolder holder, int position) {
    Table table = mTableList.get(position);
    holder.mTableNameTextView.setText(table.getTableName());
    holder.tableItemLayout.setSelected(selectedPosition==position);
    if(table.getOrderID()!=0 && selectedPosition!=position)
    {
        Log.i("OrderId",table.getTableName()+table.getOrderID());
        holder.tableItemLayout.setBackgroundColor(mContext.getResources().getColor(R.color.colorAmber));
    }
    holder.tableItemLayout.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    notifyItemChanged(selectedPosition);
                    selectedPosition = position;
                    notifyItemChanged(selectedPosition);
                }
            }
    );
}

1 ответ

Решение

Я думаю, вам нужно сбросить фоновый цвет в другой части,

public void onBindViewHolder(TableItemViewHolder holder, int position) {
    Table table = mTableList.get(position);
    holder.mTableNameTextView.setText(table.getTableName());
    holder.tableItemLayout.setSelected(selectedPosition==position);
    if(table.getOrderID()!=0 && selectedPosition!=position)
    {
        Log.i("OrderId",table.getTableName()+table.getOrderID());
        holder.tableItemLayout.setBackgroundColor(mContext.getResources().getColor(R.color.colorAmber));
    }else{
// Reset background color
}
    holder.tableItemLayout.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    notifyItemChanged(selectedPosition);
                    selectedPosition = position;
                    notifyItemChanged(selectedPosition);
                }
            }
    );
}
Другие вопросы по тегам