Логическое значение в firestore переключается с флажком.Требуется 2 клика, чтобы изменить значение? - PullRequest
0 голосов
/ 23 февраля 2019

Я создал 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;

    }
}
...