长点击列表视图从Firebase - Android删除数据



我从fireabase检索数据到listview,但只检索到name,所以我想使用longclickitem删除许多数据中的一个。

这是列表视图看起来像:

  • 芒果
  • 榴莲
  • 菠萝

当我长按芒果时,我可以获得nameid

这就是我将所有数据检索到列表视图的方式。

ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
model = ds.getValue(Model.class);
list.add(model.getNama().toString());

}
listView.setAdapter(adapter);
sortData(ascending);
ascending = !ascending;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

这是我的长点击方法:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
listItem = listView.getItemAtPosition(position).toString();
Toast.makeText(RetrieveActivity.this, listItem, Toast.LENGTH_LONG).show();
delFruit(listItem);
return false;
}
private void delFruit(String id) {
DatabaseReference dr = FirebaseDatabase.getInstance().getReference().child("Fruit").child("").child(listItem);
dr.removeValue();
}
});

那么当我长点击项目name数据时,我如何获得id

您需要找到一种方法来保留适配器中每个快照的ds.getKey(),以便在需要时可以查找它。

FirebaseUI中就是一个很好的例子,它有一个FirebaseArray类,可以将数据的实际快照保存在一个列表中:

private final List<DataSnapshot> mSnapshots = new ArrayList<>();

现在,每当使用 FirebaseUI 适配器的应用遇到类似您的情况时,它都可以通过以下方式查找该项目的DatabaseReference或密钥:

public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
listItem = adapter.getRef(position).removeValue();
return false;
}

最新更新