如何使用列表视图中的复选框更新数据库列

时间:2019-02-04 18:26:34

标签: java android firebase firebase-realtime-database android-checkbox

我在自定义列表视图中添加了一个复选框。此列表是一个任务列表,当您点击时将允许用户在另一个活动中编辑任务,这已经实现。

选中后,我要使此复选框将任务的状态更改为“完成”。我可以通过将数据传递到活动并在其中进行更改来做到这一点,但是我不知道从这个角度来看如何做。

我尝试实现此功能,但是它不起作用,并且没有错误。它还取消了选择列表项(任务)进行编辑或删除的功能。

如果我的结构或提问不正确,请告诉我。

复选框方法

    this.tasks.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            final DatabaseReference checkBoxStatus = FirebaseDatabase.getInstance().getReference("Task List/" + tasks.get(position)).child("Status");

            CheckBox completeCheckBox = view.findViewById(R.id.checkBox);
            completeCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                    if (isChecked) {
                        ValueEventListener checkedBox = new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                dataSnapshot.getChildren(); {

                                    checkBoxStatus.setValue("Complete");

                                }//getChildren
                            }//OnDataChange
                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                            }//OnCancelled
                        };
                        checkBoxStatus.addListenerForSingleValueEvent(checkedBox);
                    }//if
                }//OnCheckedChanged
            });
        }//OnItemClick
    });

以列表方式查看并点击任务

this.tasks.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
            final DatabaseReference listClick = FirebaseDatabase.getInstance().getReference("Task List/" + tasks.get(position));
            final Intent intent = new Intent(task_list.this, edit_task.class);

            ValueEventListener selectItem = new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    dataSnapshot.getChildren();
                    {
                        String key = tasks.get(position);
                        String taskName = dataSnapshot.child("Name").getValue(String.class);
                        String date = dataSnapshot.child("Date").getValue(String.class);
                        String assignee = dataSnapshot.child("Assigned to").getValue(String.class);
                        String type = dataSnapshot.child("Type").getValue(String.class);
                        String status = dataSnapshot.child("Status").getValue(String.class);
                        String descrip = dataSnapshot.child("Description").getValue(String.class);

                        intent.putExtra("passTaskName", taskName);
                        intent.putExtra("passDate", date);
                        intent.putExtra("passAssigned", assignee);
                        intent.putExtra("passType", type);
                        intent.putExtra("passStatus", status);
                        intent.putExtra("passDescription", descrip);

                        intent.putExtra("passKey", key);

                        startActivity(intent);
                    }//getChildren

                    task_list.this.tasks.setAdapter(arrayAdapter);
                }//OnDataChange
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }//OnCancelled

            };

            listClick.addListenerForSingleValueEvent(selectItem);


        }//OnItemClick
    });

0 个答案:

没有答案