我已经创建了一个回收视图适配器,从列表中提取物品,根据他们的位置。目前,当我尝试添加一个新项目时,它当前会取消一些项目,而不是其他项目(那些超出第7位的项目)。我的原始代码是:
public void onBindViewHolder(ViewHolder holder, int position){
db.openDatabase();
ShoppingModel item = shoppingList.get(position);
holder.item.setText(item.getItem());
holder.item.setChecked(toBoolean(item.getStatus()));
if(holder.item.isChecked()){
holder.item.setTextColor(Color.GRAY);
}
holder.item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(isChecked){
db.updateStatus(item.getId(), 1);
}
else{
db.updateStatus(item.getId(), 0);
}
}
});我当时以为我没有更新shoppingList或条目,所以我添加了以下代码来获取:
public void onBindViewHolder(ViewHolder holder, int position){
db.openDatabase();
ShoppingModel item = shoppingList.get(position);
holder.item.setText(item.getItem());
holder.item.setChecked(toBoolean(item.getStatus()));
if(holder.item.isChecked()){
holder.item.setTextColor(Color.GRAY);
}
holder.item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(isChecked){
db.updateStatus(item.getId(), 1);
holder.item.setTextColor(Color.GRAY);
shoppingList.get(holder.getAbsoluteAdapterPosition()).setStatus(1);
holder.item.setChecked(true);
}
else{
db.updateStatus(item.getId(), 0);
holder.item.setTextColor(Color.BLACK);
shoppingList.get(holder.getAbsoluteAdapterPosition()).setStatus(0);
holder.item.setChecked(false);
}
}
});但打开盒子的问题依然存在。如果需要,可以找到完整的代码https://github.com/PhilipDW183/ShoppingListApp。任何想法都将不胜感激,或任何指导!
提前感谢!
发布于 2022-09-09 14:54:08
不知道为什么,但这似乎解决了这个问题:
private int status;
holder.item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(isChecked){
status = 1;
holder.item.setTextColor(Color.GRAY);
} else {
status = 0;
holder.item.setTextColor(Color.BLACK);
}
updateItem(holder.getAbsoluteAdapterPosition(), status);
}
});
public void updateItem(int position, int status){
ShoppingModel item = shoppingList.get(position);
db.updateStatus(item.getId(), status);
shoppingList.get(position).setStatus(status);
}https://stackoverflow.com/questions/73663492
复制相似问题