【发布时间】:2021-11-24 06:45:55
【问题描述】:
我正在尝试编辑 recyclerview 中的项目,该项目显示来自 Firebase 的一些数据。但编辑后的数据集并没有改变。它显示以前的以及新的更新项,直到活动重新加载。截图在最后。
我正在通过 alertdialog 编辑项目。以下是代码:
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.MyViewHolder> {
ArrayList<User_Post> user_posts=null;
Context context;
public ListAdapter(@Nullable ArrayList<User_Post> posts, Context c) {
this.user_posts=posts; // the data set
this.context=c;
}
在项目的编辑按钮上点击AlertDialog打开:
//'post' is an instance of type User_Post containing the current data item.
dialogBuilder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(isValid()) {
post.setWorkType(txtType.getSelectedItem().toString());
post.setWorkDescription(txtDetails.getText().toString());
user_posts.set(position,post);
updateDataSet(user_posts);
saveToFirebase(post,"edit");
Toast.makeText(context, "Post updated", Toast.LENGTH_SHORT).show();
}
}
}
firebase 数据更新代码:
private void saveToFirebase(User_Post post, String task) {
String id=post.getPostID();
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("gs://smart-worker-c73c4.appspot.com/gs:");
DatabaseReference myRef = database.getReference("posts");
if(task.equals("edit")) {
myRef.child(id).setValue(post);
}
else {
myRef.child(id).setValue(null);
storageRef.child(id).delete();
}
}
用于更新数据集:
private void updateDataSet(ArrayList<User_Post> posts){
this.user_posts=posts;
notifyDataSetChanged();
}
【问题讨论】:
标签: android firebase-realtime-database android-recyclerview notifydatasetchanged