Я создал adapter
с OnItemClickListener
и установил его на checkbox
.Мне удалось сделать checkbox
переключение значения Boolean
в Firebase
firestore, но для его изменения требуется 2 щелчка.
При нажатии checkbox
он не переключается на отмеченный до второго щелчка.То же самое касается снятия отметки.
Метод вызывается в onCreate
.
"done" - это логическое поле в моей базе данных.
checkbox
находится на recyclerview
, вложенном в другой recyclerview
.Вот почему у него есть вложенная коллекция / документ и переменная для идентификатора.Я исключил намерения, используемые для создания переменных.
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;
}
}