从 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
}
});
我有这样的数据库结构: 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
}
});