根据内容设置 RecyclerView 项目的背景颜色
Set background color for RecyclerView item depending on content
简短说明:
我在 RecyclerView 项目中显示预期库存与计数库存。这个想法是,如果预期和计数的项目存在差异 b/n,则将数量设为红色,否则设为黑色。我得到的结果是所有卡片中的所有项目最终都是红色的。
我的尝试:
我尝试比较 onBindViewHolder() 中的两个数量,其中写了大多数项目特定的内容,但我没有得到结果。
public class PastInvDetailsAdapter extends
RecyclerView.Adapter<PastInvDetailsAdapter.ViewHolder> {
ArrayList<Material> countedquantity;
PastInvDetailsActivity currentActivity;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView material_description;
public TextView actualquantity;
public TextView countedquantity;
public ViewHolder(View view) {
super(view);
material_description = view.findViewById(R.id.tv_past_inv_details_material_desc);
actualquantity = view.findViewById(R.id.tv_past_inv_details_current_no);
countedquantity = view.findViewById(R.id.tv_past_inv_details_counted_no);
}
}
public PastInvDetailsAdapter(ArrayList<Material> countedquantity, PastInvDetailsActivity currentActivity) {
this.countedquantity = countedquantity;
this.currentActivity = currentActivity;
}
@Override
public PastInvDetailsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(currentActivity.getApplicationContext())
.inflate(R.layout.past_inventory_details_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.material_description.setText(countedquantity.get(position).getMaterial() + " " +
countedquantity.get(position).getDescription());
holder.actualquantity.setText("Expected: " + countedquantity.get(position).getActualquantity());
holder.countedquantity.setText("Counted: " + countedquantity.get(position).getQuantity());
int actualInt = Integer.parseInt(countedquantity.get(position).getActualquantity());
int expectedInt = Integer.parseInt(countedquantity.get(position).getQuantity());
if (actualInt != expectedInt) {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
} else {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
}
}
@Override
public int getItemCount() {
return countedquantity.size();
}
}
这是否是问题所在?
if (actualInt != expectedInt) {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
} else {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
}
更改为:
if (actualInt != expectedInt) {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
} else {
holder.countedquantity.setTextColor(Color.BLACK);
holder.actualquantity.setTextColor(Color.BLACK);
}
简短说明: 我在 RecyclerView 项目中显示预期库存与计数库存。这个想法是,如果预期和计数的项目存在差异 b/n,则将数量设为红色,否则设为黑色。我得到的结果是所有卡片中的所有项目最终都是红色的。
我的尝试: 我尝试比较 onBindViewHolder() 中的两个数量,其中写了大多数项目特定的内容,但我没有得到结果。
public class PastInvDetailsAdapter extends
RecyclerView.Adapter<PastInvDetailsAdapter.ViewHolder> {
ArrayList<Material> countedquantity;
PastInvDetailsActivity currentActivity;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView material_description;
public TextView actualquantity;
public TextView countedquantity;
public ViewHolder(View view) {
super(view);
material_description = view.findViewById(R.id.tv_past_inv_details_material_desc);
actualquantity = view.findViewById(R.id.tv_past_inv_details_current_no);
countedquantity = view.findViewById(R.id.tv_past_inv_details_counted_no);
}
}
public PastInvDetailsAdapter(ArrayList<Material> countedquantity, PastInvDetailsActivity currentActivity) {
this.countedquantity = countedquantity;
this.currentActivity = currentActivity;
}
@Override
public PastInvDetailsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(currentActivity.getApplicationContext())
.inflate(R.layout.past_inventory_details_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.material_description.setText(countedquantity.get(position).getMaterial() + " " +
countedquantity.get(position).getDescription());
holder.actualquantity.setText("Expected: " + countedquantity.get(position).getActualquantity());
holder.countedquantity.setText("Counted: " + countedquantity.get(position).getQuantity());
int actualInt = Integer.parseInt(countedquantity.get(position).getActualquantity());
int expectedInt = Integer.parseInt(countedquantity.get(position).getQuantity());
if (actualInt != expectedInt) {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
} else {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
}
}
@Override
public int getItemCount() {
return countedquantity.size();
}
}
这是否是问题所在?
if (actualInt != expectedInt) {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
} else {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
}
更改为:
if (actualInt != expectedInt) {
holder.countedquantity.setTextColor(Color.RED);
holder.actualquantity.setTextColor(Color.RED);
} else {
holder.countedquantity.setTextColor(Color.BLACK);
holder.actualquantity.setTextColor(Color.BLACK);
}