在用户点击时更新 FirebaseUI FirebaseRecyclerView Child
Update FirebaseUI FirebaseRecyclerView Child on user click
我从 Firebase 数据库开始。我制作了一个小型任务跟踪器应用程序,我可以在其中将项目推送到数据库。我正在使用 Firebase UI 和 FriebaseRecyclerView。
问题是我无法从 firebaseRecyclerView 更新项目点击的孩子。下面是我的视图持有者的代码。但是在单击复选框时,我的数据库没有按预期更新。
public static class TaskViewHolder extends RecyclerView.ViewHolder{
TextView title,description;
CheckBox checkBox;
FirebaseAuth mAuth;
FirebaseUser firebaseUser;
public TaskViewHolder(View v) {
super(v);
title = (TextView) v.findViewById(R.id.title);
description= (TextView) v.findViewById(R.id.Description);
checkBox = (CheckBox) v.findViewById(R.id.checkboxTaskRow);
mAuth = FirebaseAuth.getInstance();
firebaseUser = mAuth.getCurrentUser();
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.taskList);
final FirebaseRecyclerAdapter firebaseRecyclerAdapter = (FirebaseRecyclerAdapter) recyclerView.getAdapter();
if(checkBox.isChecked()) {
SpannableString content = new SpannableString(title.getText());
content.setSpan(new StrikethroughSpan(), 0, content.length(), 0);
title.setText(content);
content = new SpannableString(description.getText());
content.setSpan(new StrikethroughSpan(), 0, content.length(), 0);
description.setText(content);
}
else
{
description.setText(description.getText().toString());
title.setText(title.getText().toString());
}
}
});
} }
下面还有我的适配器代码
final FirebaseRecyclerAdapter<UnitTask,TaskViewHolder> adapter =
new FirebaseRecyclerAdapter<UnitTask, TaskViewHolder>(UnitTask.class,R.layout.task,TaskViewHolder.class,userRef) {
@Override
protected void populateViewHolder(TaskViewHolder viewHolder, UnitTask model, int position) {
mAuth = FirebaseAuth.getInstance();
firebaseUser = mAuth.getCurrentUser();
viewHolder.title.setText(model.getTitle());
viewHolder.description.setText(model.getDescription());
viewHolder.checkBox.setChecked(model.isCompleted());
}
};
我的 UnitTask class
public class UnitTask {
public String title;
public String description;
boolean completed;
public UnitTask(String title, String description, boolean completed) {
this.title = title;
this.description = description;
this.completed = completed;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isCompleted() {
return completed;
}
public void setCompleted(boolean completed) {
this.completed = completed;
}
public UnitTask() {
// Do Nothing
}
}
任何帮助将不胜感激。另外,我刚开始 android 所以希望我会犯愚蠢的错误。
谢谢
实现目标的解决方法是:
1) 当用户检查一个项目时,让 "special value" 推送到 firebase 数据库。
2) 在 FirebaseRecyclerAdapter#populateViewHolder 中:如果项目有 "special value",更改布局
更新
试试 google 中的示例:
https://github.com/firebase/quickstart-android/blob/master/database
让我们看看星号按钮的实现。
在 PostListFragment.java 你会发现:
// Determine if the current user has liked this post and set UI accordingly
if (model.stars.containsKey(getUid())) {
viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24);
} else {
viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24);
}
// Bind Post to ViewHolder, setting OnClickListener for the star button
viewHolder.bindToPost(model, new View.OnClickListener() {
@Override
public void onClick(View starView) {
// Need to write to both places the post is stored
DatabaseReference globalPostRef = mDatabase.child("posts").child(postRef.getKey());
DatabaseReference userPostRef = mDatabase.child("user-posts").child(model.uid).child(postRef.getKey());
// Run two transactions
onStarClicked(globalPostRef);
onStarClicked(userPostRef);
}
});
@Muhammad Hassan Niazi 在 if 条件下使用 push 或 setvalue 方法更新您的数据库记录
我从 Firebase 数据库开始。我制作了一个小型任务跟踪器应用程序,我可以在其中将项目推送到数据库。我正在使用 Firebase UI 和 FriebaseRecyclerView。
问题是我无法从 firebaseRecyclerView 更新项目点击的孩子。下面是我的视图持有者的代码。但是在单击复选框时,我的数据库没有按预期更新。
public static class TaskViewHolder extends RecyclerView.ViewHolder{
TextView title,description;
CheckBox checkBox;
FirebaseAuth mAuth;
FirebaseUser firebaseUser;
public TaskViewHolder(View v) {
super(v);
title = (TextView) v.findViewById(R.id.title);
description= (TextView) v.findViewById(R.id.Description);
checkBox = (CheckBox) v.findViewById(R.id.checkboxTaskRow);
mAuth = FirebaseAuth.getInstance();
firebaseUser = mAuth.getCurrentUser();
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.taskList);
final FirebaseRecyclerAdapter firebaseRecyclerAdapter = (FirebaseRecyclerAdapter) recyclerView.getAdapter();
if(checkBox.isChecked()) {
SpannableString content = new SpannableString(title.getText());
content.setSpan(new StrikethroughSpan(), 0, content.length(), 0);
title.setText(content);
content = new SpannableString(description.getText());
content.setSpan(new StrikethroughSpan(), 0, content.length(), 0);
description.setText(content);
}
else
{
description.setText(description.getText().toString());
title.setText(title.getText().toString());
}
}
});
} }
下面还有我的适配器代码
final FirebaseRecyclerAdapter<UnitTask,TaskViewHolder> adapter =
new FirebaseRecyclerAdapter<UnitTask, TaskViewHolder>(UnitTask.class,R.layout.task,TaskViewHolder.class,userRef) {
@Override
protected void populateViewHolder(TaskViewHolder viewHolder, UnitTask model, int position) {
mAuth = FirebaseAuth.getInstance();
firebaseUser = mAuth.getCurrentUser();
viewHolder.title.setText(model.getTitle());
viewHolder.description.setText(model.getDescription());
viewHolder.checkBox.setChecked(model.isCompleted());
}
};
我的 UnitTask class
public class UnitTask {
public String title;
public String description;
boolean completed;
public UnitTask(String title, String description, boolean completed) {
this.title = title;
this.description = description;
this.completed = completed;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isCompleted() {
return completed;
}
public void setCompleted(boolean completed) {
this.completed = completed;
}
public UnitTask() {
// Do Nothing
}
}
任何帮助将不胜感激。另外,我刚开始 android 所以希望我会犯愚蠢的错误。
谢谢
实现目标的解决方法是:
1) 当用户检查一个项目时,让 "special value" 推送到 firebase 数据库。
2) 在 FirebaseRecyclerAdapter#populateViewHolder 中:如果项目有 "special value",更改布局
更新
试试 google 中的示例:
https://github.com/firebase/quickstart-android/blob/master/database
让我们看看星号按钮的实现。
在 PostListFragment.java 你会发现:
// Determine if the current user has liked this post and set UI accordingly
if (model.stars.containsKey(getUid())) {
viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24);
} else {
viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24);
}
// Bind Post to ViewHolder, setting OnClickListener for the star button
viewHolder.bindToPost(model, new View.OnClickListener() {
@Override
public void onClick(View starView) {
// Need to write to both places the post is stored
DatabaseReference globalPostRef = mDatabase.child("posts").child(postRef.getKey());
DatabaseReference userPostRef = mDatabase.child("user-posts").child(model.uid).child(postRef.getKey());
// Run two transactions
onStarClicked(globalPostRef);
onStarClicked(userPostRef);
}
});
@Muhammad Hassan Niazi 在 if 条件下使用 push 或 setvalue 方法更新您的数据库记录