从 RecyclerAdapter 上的 firebase 中删除数据
Posted
技术标签:
【中文标题】从 RecyclerAdapter 上的 firebase 中删除数据【英文标题】:Removing data from firebase on a RecyclerAdapter 【发布时间】:2018-10-10 03:13:47 【问题描述】:我正在删除 RecyclerViewAdapter 上带有 PopupMenu 的列表项,但是当该项目被删除时,它仍保留在 Firebase 上。
这是在 RecyclerAdapter 的 onBindViewHolder 上
holder.opcionesButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
//creating a popup menu
PopupMenu popup = new PopupMenu(context, holder.opcionesButton);
//inflating menu from xml resource
popup.inflate(R.menu.menu_edit);
//adding click listener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
@Override
public boolean onMenuItemClick(MenuItem item)
switch (item.getItemId())
case R.id.edit_item:
//handle menu1 click
break;
case R.id.delete_item:
tareasList.remove(position);
notifyItemRemoved(position);
Toast.makeText(context, "Tareas eliminada!", Toast.LENGTH_SHORT).show();
break;
return false;
);
//displaying the popup
popup.show();
);
这是在 MainFragment 上
final Query tareasQuery = mTareasDatabase.child(userId);
tareasQuery.addChildEventListener(new ChildEventListener()
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s)
Tareas tareas = new Tareas();
tareas.setFecha(dataSnapshot.getValue(Tareas.class).getFecha());
tareas.setDescripcion(dataSnapshot.getValue(Tareas.class).getDescripcion());
tareas.setLista(dataSnapshot.getValue(Tareas.class).getLista());
tareas.setPrioridad(dataSnapshot.getValue(Tareas.class).getPrioridad());
mTareasList.add(tareas);
mTareasAdapter.notifyDataSetChanged();
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s)
String tareasId = dataSnapshot.getValue(Tareas.class).getTareasId();
mTareasDatabase.child(userId).child(tareasId).removeValue();
@Override
public void onChildRemoved(DataSnapshot dataSnapshot)
String tareasId = dataSnapshot.getValue(Tareas.class).getTareasId();
mTareasDatabase.child(userId).child(tareasId).removeValue();
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s)
@Override
public void onCancelled(DatabaseError databaseError)
);
一切正常,除了没有从 firebase 中删除它
解决方案
同时从 firebase 和 recycler 视图中删除该项目
case R.id.delete_item:
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
String tareasId = tareas.getTareasId();
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
DatabaseReference databaseReference = firebaseDatabase.getReference("Tareas")
.child(userId).child(tareasId);
databaseReference.removeValue();
tareasList.remove(position);
notifyItemRemoved(position);
Toast.makeText(context, "Tareas eliminada!", Toast.LENGTH_SHORT).show();
break;
【问题讨论】:
【参考方案1】:好的,我解决了。我只需要在删除项上添加所有数据库引用,并同时将其从回收器视图和数据库中删除
case R.id.delete_item:
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
String tareasId = tareas.getTareasId();
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId = user.getUid();
DatabaseReference databaseReference = firebaseDatabase.getReference("Tareas")
.child(userId).child(tareasId);
databaseReference.removeValue();
tareasList.remove(position);
notifyItemRemoved(position);
Toast.makeText(context, "Tareas eliminada!", Toast.LENGTH_SHORT).show();
break;
【讨论】:
如果你有更好的方法,请发帖【参考方案2】:这是因为您只从本地列表中删除。您也必须从 firebase 中删除该值。用于删除使用代码
firebaseRef.removeValue();
在您的 firebaseRef 中,您必须显示要删除的值。
【讨论】:
以上是关于从 RecyclerAdapter 上的 firebase 中删除数据的主要内容,如果未能解决你的问题,请参考以下文章
历史上的今天:IBM 获得了第一项专利;Verizon 收购雅虎;亚马逊发布 Fire Phone...
如何使用 Parse LiveQuery for Android 自动将新对象添加到我的 RecyclerAdapter?
从 Fire Storage 检索图像,但是如果图像不存在,则应用程序崩溃