我用adapter
创建了一个OnItemClickListener
,并将其设置为checkbox
。我已经成功地将checkbox
切换为Boolean
Firestore中的Firebase
值,但是需要2次单击才能更改该值。
单击checkbox
时,直到第二次单击才切换到选中状态。取消选中也是如此。
该方法在onCreate
中被调用。
“完成”是我数据库中的布尔值字段。
checkbox
位于另一个recyclerview
中嵌套的recyclerview
上。这就是为什么它具有嵌套的集合/文档和ID变量的原因。我排除了用于创建变量的意图。
private void setUpCheckBox() {
adapter.setOnItemClickListener(new ToDoAdapter.OnItemClickListener() {
@Override
public void onItemClick(DocumentSnapshot documentSnapshot, final int
position) {
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox_complete);
Map<String, Object> done = new HashMap<>();
if (checkBox.isChecked()) {
checkBox.setChecked(true);
done.put("done", true);
}
if (!checkBox.isChecked()) {
checkBox.setChecked(false);
done.put("done", false);
}
db.collection("customer2").document(id1).collection("To Do").document(id2)
.set(done, SetOptions.merge())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(CustomerProfile.this, id2, Toast.LENGTH_SHORT).show();
}
});
}
});
}
这是我的适配器类中的嵌套类。
private OnItemClickListener listener;
监听器在父类中声明。
class ToDoHolder extends RecyclerView.ViewHolder {
CheckBox checkBoxComplete;
public ToDoHolder(@NonNull View itemView) {
super(itemView);
checkBoxComplete = itemView.findViewById(R.id.checkBox_complete);
checkBoxComplete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(OnItemClickListener listener){
this.listener = listener;
}
}