在安卓工作室的RecyclerView中单击按钮时更改按钮的颜色



我在RecyclerViews中有一些按钮,点击时颜色应该从红色变为绿色,从绿色变为红色。创建了Adapters和不同的buttons.xml,因为它可以正常工作,但无法理解将颜色从红色变为绿色和从绿色变为红色。

holder.seat3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.seat3.setBackgroundColor(Color.parseColor("#ff0000"));
}
});
}

我想在这里比较一下颜色,例如:如果颜色是红色,那么就换成绿色,如果是绿色,那么就变成红色

我认为您正在努力维护数据的状态。考虑以下代码:

public class CustomAdapter extends
RecyclerView.Adapter<CustomAdapter.ViewHolder> {
List<MyData> myDataList;
Context context;
public CustomAdapter(Context context, List<MyData> myDataList) {
this.myDataList = myDataList;
this.context = context;
}
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.button_lst, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull CustomAdapter.ViewHolder holder, int position) {
MyData currentData = myDataList.get(position);

holder.seat.setOnClickListener(v -> holder.toggleColor(currentData));
holder.seat1.setOnClickListener(v -> holder.toggleColor(currentData));
holder.seat2.setOnClickListener(v -> holder.toggleColor(currentData));
holder.seat3.setOnClickListener(v -> holder.toggleColor(currentData));
}
@Override
public int getItemCount() {
return myDataList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
Button seat, seat1, seat2, seat3;
public ViewHolder(@NonNull View itemView) {
super(itemView);
seat = itemView.findViewById(R.id.button);
seat1 = itemView.findViewById(R.id.button1);
seat2 = itemView.findViewById(R.id.button2);
seat3 = itemView.findViewById(R.id.button3);
}
private void toggleColor(MyData data) {
if (data.state == MyData.STATE_RED)
data.state = MyData.STATE_GREEN;
else
data.state = MyData.STATE_RED;
switch (data.state) {
case MyData.STATE_RED:
seat.setBackgroundColor(Color.parseColor("ff0000"));
seat1.setBackgroundColor(Color.parseColor("ff0000"));
seat2.setBackgroundColor(Color.parseColor("ff0000"));
seat3.setBackgroundColor(Color.parseColor("ff0000"));
break;
case MyData.STATE_GREEN:
seat.setBackgroundColor(Color.parseColor("00ff00"));
seat1.setBackgroundColor(Color.parseColor("00ff00"));
seat2.setBackgroundColor(Color.parseColor("00ff00"));
seat3.setBackgroundColor(Color.parseColor("00ff00"));
break;
default:
Log.e("ERROR", "toggleColor: invalid operation");
break;
}
}
}
public class MyData {
private static final int STATE_INITIAL = 0;
private static final int STATE_RED = 1;
private static final int STATE_GREEN = 2;
public String data;
public int state;
}
}

MainMethod.java

String[] Seats={"a","b","c","d","e","f","g","h","i","j","k","l","m"};
List<MyData> myDataList = new ArrayList<>();

for(String it : Seats){
myDataList.add(new MyData(it, MyData.STATE_INITIAL));
}
CustomAdapter adapter = new CustomAdapter(this, myDataList);

PS:在一个单独的文件中声明类MyData

最新更新