Я пытаюсь обновить дочернюю заметку в firebase, когда нажимаю на объект в RecyclerView, но не могу заставить его работать.Я опускаю и заполняю ReyclerView правильно.Что мне нужно, так это когда я нажимаю на объект, я хочу, чтобы «выбранный» дочерний элемент в firebase обновлялся до true для этой конкретной задачи.С самого начала выбранный дочерний элемент является ложным и скрывает изображение, и когда я щелкаю объект в окне Reyclerview, оно должно быть обновлено до true, чтобы изображение отображалось.Я надеюсь, вы понимаете, что я ищу, и можете мне помочь.
Структура Firebase
"groups": {
groupKey: {
"task": {
taskKey: {
"selected": "true"
}
}
}
}
Вот что я получил:
mDatabase = FirebaseDatabase.getInstance();
mDBRef = mDatabase.getReference().child("groups").child(projectID);
mDatabaseReference = mDatabase.getReference().child("groups").child(projectID).child("task");
mDBRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
taskList.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Boolean selected = (Boolean) snapshot.child("selected").getValue();
TaskDataService taskDataService = new TaskDataService();
taskDataService.setSelected(selected);
taskList.add(taskDataService);
taskRecyclerAdapter = new TaskRecyclerAdapter(Project.this, taskList);
recyclerView.setAdapter(taskRecyclerAdapter);
taskRecyclerAdapter.notifyDataSetChanged();
DatabaseReference updateTaskToDB = mDatabaseReference.push();
Map<String, Object> taskToSave = new HashMap<>();
taskToSave.put("selected", taskDataService.getSelected());
updateTaskToDB.setValue(taskToSave);
}
}
});
RecyclerAdapter
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
final TaskDataService dataService = serviceList.get(position);
holder.imgCheckStatus = dataService.getSelected();
if (dataService.getSelected() == false) {
holder.checkImageView.setVisibility(View.INVISIBLE);
} else {
}
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataService.setSelected(true);
Log.d("CLICK", String.valueOf(dataService.getSelected()));
}
});
}
DataService
public Boolean selected;
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}