我从fireabase检索数据到listview,但只检索到name
,所以我想使用longclickitem删除许多数据中的一个。
这是列表视图看起来像:
- 芒果
- 榴莲
- 菠萝
当我长按芒果时,我可以获得name
也id
。
这就是我将所有数据检索到列表视图的方式。
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;
}