从 firebase 检索复选框状态

Retrieve checkbox status from firebase

我有这样的数据库结构: Firebasedatabase 我想获取布尔值以填充列表视图项目中的另一个复选框。 当我添加一个新项目时,我使用一个复选框在 firebase 中将布尔值设置为 "true or false"。但我想获取值以填充列表视图中的另一个复选框。 这是我的适配器(它在我的 MainActivity 中)

 @Override
protected void onStart() {
    super.onStart();

    mFirebaseAdapter = new FirebaseRecyclerAdapter<Jobber, ShowDataViewHolder>
            (Jobber.class, R.layout.list_jobber, ShowDataViewHolder.class, myRef) {


        public void populateViewHolder(final ShowDataViewHolder viewHolder, Jobber model, final int position) {

            viewHolder.Image_Title(model.getJobbnavn());







            viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Jobbliste.this);
                    builder.setMessage("Do you want to Delete this data ?");
                    builder.setCancelable(false);
                    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            int selectedItems = position;
                            mFirebaseAdapter.getRef(selectedItems).removeValue();
                            mFirebaseAdapter.notifyItemRemoved(selectedItems);
                            recyclerView.invalidate();
                            onStart();
                        }
                    });
                    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    AlertDialog dialog = builder.create();
                    dialog.setTitle("Confirm");
                    dialog.show();

                    return false;
                }
            });



        }
    };

    recyclerView.setAdapter(mFirebaseAdapter);
}

public class ShowDataViewHolder extends RecyclerView.ViewHolder {


    private final CheckedTextView image_title;
    private final CheckBox chk;


    public ShowDataViewHolder(final View itemView) {


        super(itemView);


        image_title = (CheckedTextView) itemView.findViewById(R.id.fetch_image_title);
        chk = (CheckBox) itemView.findViewById(R.id.checkBox);


    }





    private void Image_Title(String title) {
        image_title.setText(title);


    }

}

您的解决方案在于 Firebase 数据库中可用的 valueEventListener(),用于从数据库获取实时更新。

您需要根据数据库中的布尔值在要修改的列表项中添加 valueEventListener()
您需要修改 valueEventListener() 中的 onDataChanged() 回调函数,该函数会在调用它的特定 DataReference 处根据数据库的变化自动调用。 valueEventListener() 当数据库中的相应值(即它指向的数据库引用)发生变化时自动触发,触发该函数后,您执行所需的代码以通过调用函数 setChecked() 将复选框设置为已选中。

它可能看起来像这样 checkboxVariable.setChecked(true)

您可以阅读有关 valueEventListener() 的更多信息,该功能可通过 class DatabaseReference.



Example from documentation on valueEventListener



希望对您有所帮助。

我可能会首先对该节点的所有数据执行类似的操作。它在某些情况下可能很有用:

public class Data
{
   public String jobId;
   public boolean checked;
}

并使用以下代码检索我的值

 FirebaseDatabase.getInstance().getReference()
            .child("MyReference")
            .child( PROFILE_KEY )
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    Data data= dataSnapshot.getValue(Data.class);

                    if (consumer == null)
                    {
                        //data does not exists for the specified key
                    }
                    else if(data.checked)
                    {
                       //data is checked
                    }
                    else {
                        //data not checked
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                   // there was an error
                }
            });