如何从 ListView 中删除一个项目并在 Firebase 上删除它?
Posted
技术标签:
【中文标题】如何从 ListView 中删除一个项目并在 Firebase 上删除它?【英文标题】:How to delete an item from ListView and also delete it on Firebase? 【发布时间】:2020-11-14 06:05:59 【问题描述】:我的问题是,如果我尝试删除我的 ListView
上的一个项目,所有数据都将被删除到 listview 和我的 firebase 实时数据库上。我想要的是,如果我长按一个项目,只会删除该项目,而不是ListView
上的所有项目。谢谢你。任何帮助表示赞赏
这是我声明的:
MatkulAdapter matkulAdapter = null;
Matkul matkul;
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
DatabaseReference dbReference = root.child("MataKuliah");
这是删除项目的代码:
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
Matkul item = matkulAdapter.getItem(position);
matkulAdapter.remove(item);
dbReference.removeValue();
matkulAdapter.notifyDataSetChanged();
return true;
);
这是我的数据库:
This is my database
编辑问题
我也用 .child 尝试了这段代码,但数据只在 ListView 上删除。因此,当我重新打开 ListView 时,数据会返回。
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
Matkul item = matkulAdapter.getItem(position);
matkulAdapter.remove(item);
dbReference.child(item.getNamaMatkul()).removeValue();
matkulAdapter.notifyDataSetChanged();
【问题讨论】:
【参考方案1】:您需要在第二个孩子中传递您的 Firebase 项目 ID (15955880552231),如下代码:
Query query = rdbReference.orderByChild("namaMatkul").equalTo(item.namaMatkul);
query.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
for (DataSnapshot itemSnapshot: dataSnapshot.getChildren())
appleSnapshot.getRef().removeValue();
matkulAdapter.remove(item);
matkulAdapter.notifyDataSetChanged();
@Override
public void onCancelled(DatabaseError databaseError)
Log.e(TAG, "onCancelled", databaseError.toException());
);
【讨论】:
谢谢先生,但是很抱歉,如何获取 firebaseItemID?我该如何申报? 使用点击监听器中的代码查找特定项目 非常感谢先生!该代码正在运行,但有一个小错误,如果我删除一个项目,它将更改为其他数据或数据将加倍,但是当我先返回然后再次打开它时,它会从列表视图中消失。非常感谢先生 这只是sn-p,需要自己开发逻辑;)【参考方案2】:当您使用以下代码行时:
dbReference.removeValue();
MataKuliah
下的所有内容都将被删除。如果只需要删除1595588052231
孩子,那么只需使用以下代码行:
dbReference.child("1595588052231").removeValue();
更好的方法可能是将1595588052231
作为uid
属性的值存储在数据库中,然后使用:
dbReference.child(item.getUid()).removeValue();
【讨论】:
谢谢先生,但是如果我想删除 MataKuliah 上的随机项目怎么办?我尝试此代码dbReference.child(item.getUid()).removeValue();
但在 getUid() 上出现错误
您有一个错误,因为您应该在 Matkul
类中添加一个名为 uid
的新属性和相应的 getUid()
getter。在您的1595588052231
节点下的数据库中,您还应该拥有应该拥有相同1595588052231
值的uid
属性。然后一切都会正常工作。如需随机取值,请查看this。
我已经在Matkul
上添加了private String uid
并获取了getUid()
,但是得到了这个错误Can't pass null for argument 'pathString' in child()
发生这种情况是因为您尝试从数据库中获取的值确实不存在。正如我之前所说,您还应该将其添加到数据库中。所以你有namaDosen
和namaMaktul
,加上uid
,其值为1595588052231
。以上是关于如何从 ListView 中删除一个项目并在 Firebase 上删除它?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Xamarin Forms ListView 中删除项目?
Android:如何从 listView 和 arrayAdapter 中删除项目