RecyclerView
OnClick
无法正常工作。它必须将状态更改为true
或false
。当我单击第一个项目时,它将存储true
并更改文本。但是,当我单击其他项目时,它会将状态更改为false
,因为第一项设置为true
,因此文本不会更改。如何分别存储每个项目的状态?
boolean isChange = false;
@Override
public void onBindViewHolder(@NonNull final WindowViewHolder holder, int position) {
Window window = windowList.get(position);
holder.textViewTitle.setText(window.getTitle());
holder.textViewChecked.setText(window.getCheck());
holder.imageView.setImageDrawable(mCtx.getResources().getDrawable(window.getImage()));
////////////////////////////////////////////////
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isChange){
holder.parentLayout.setBackgroundColor(Color.parseColor("#66BB6A"));
holder.textViewChecked.setText("True");
isChange = true;
}
else {
holder.parentLayout.setBackgroundColor(Color.parseColor("#EEEEEE"));
holder.textViewChecked.setText("False");
isChange = false;
}
//Toast.makeText(mCtx, "Clicked", Toast.LENGTH_SHORT).show();
}
});
//////////////////////////////////////
}
答案 0 :(得分:0)
为什么不使用Map? 我看到您有一些Window模型。因此,您可以在适配器中创建一个映射,并为每个Window键存储一个布尔值:
private Map<Window, Boolean> map = new HashMap<>();
然后获取当前值的值:
@Override
public void onBindViewHolder(@NonNull final WindowViewHolder holder, int position) {
Window window = windowList.get(position);
holder.textViewTitle.setText(window.getTitle());
holder.textViewChecked.setText(window.getCheck());
holder.imageView.setImageDrawable(mCtx.getResources().getDrawable(window.getImage()));
////////////////////////////////////////////////
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChange = map.get(window);
if (!isChange){
holder.parentLayout.setBackgroundColor(Color.parseColor("#66BB6A"));
holder.textViewChecked.setText("True");
map.put(window, true);
}
else {
holder.parentLayout.setBackgroundColor(Color.parseColor("#EEEEEE"));
holder.textViewChecked.setText("False");
map.put(window, false);
}
//Toast.makeText(mCtx, "Clicked", Toast.LENGTH_SHORT).show();
}
});
//////////////////////////////////////
}
答案 1 :(得分:0)
我希望您有一个setCheck()
对象的Window
方法,用于存储检查状态。您使用的isChange变量不是特定于项目的,因此它将保留上一个已检查项目的值。
根据您对代码的了解,您应该执行以下操作:
@Override
public void onBindViewHolder(@NonNull final WindowViewHolder holder, int position) {
Window window = windowList.get(position);
holder.textViewTitle.setText(window.getTitle());
holder.textViewChecked.setText(window.getCheck());
holder.imageView.setImageDrawable(mCtx.getResources().getDrawable(window.getImage()));
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (window.getCheck().toString.equals("False")) {
window.setCheck("True");
holder.parentLayout.setBackgroundColor(Color.parseColor("#66BB6A"));
holder.textViewChecked.setText("True");
} else {
window.setCheck("False");
holder.parentLayout.setBackgroundColor(Color.parseColor("#EEEEEE"));
holder.textViewChecked.setText("False");
}
}
});
}