[英]Deleting firebase entry node Android Java
我從列表視圖向Firebase添加了一個國家列表,現在我試圖通過列表視圖項單擊來分別刪除節點。
該列表現在顯示在一個列表視圖中,當我單擊特定國家/地區時,我希望該列表被刪除。 到目前為止,我已經完成了:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String Country =(listView.getItemAtPosition(position).toString());
showPopUp(Country);
}
});
我得到了那個國家。 在彈出菜單方法中,我有:
public void showPopUp(final String cntry) {
PopupMenu popupMenu = new PopupMenu(this, (RelativeLayout) findViewById(R.id.id));
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.Delete:
// Delete from Firebase
dref.child(cntry).removeValue();
Toast.makeText(getApplicationContext(), cntry,
Toast.LENGTH_LONG).show();
return true;
case R.id.Goback:
return true;
default:
return false;
}
}
});
雖然我認為我需要從Firebase移除鑰匙而不是孩子。 我應該如何實施呢?
注意:我通過以下方式將API中的國家/地區添加到列表視圖中:
DatabaseReference dref;
ListView listView;
ArrayList<String> list = new ArrayList<>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favourite_countries_list);
listView = (ListView) findViewById(R.id.lstViewFavCountries);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(adapter);
dref = FirebaseDatabase.getInstance().getReference();
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for(DataSnapshot dsp : dataSnapshot.getChildren()){
String value = dataSnapshot.getValue().toString();
list.add(String.valueOf(dsp.getValue()));
}
adapter.notifyDataSetChanged();
}
您需要將密鑰保存在某個地方,調用dataSnapshot.getKey()
獲取密鑰。
首先,為按鍵創建一個新列表
ArrayList<String> listKey = new ArrayList<>();
然后將密鑰添加到列表中
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for(DataSnapshot dsp : dataSnapshot.getChildren()){
String value = dataSnapshot.getValue().toString();
list.add(String.valueOf(dsp.getValue()));
listKey.add(dsp.getKey());
}
adapter.notifyDataSetChanged();
}
最后,在onItemClick
方法中,根據position
從列表中獲取鍵,然后將字符串傳遞給刪除方法
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String CountryKey = listKey.get(position);
showPopUp(CountryKey);
}
然后刪除值
dref.child("Countries").child(cntry).removeValue();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.