Удаление из Firebase
У меня есть список ListView, поле для ввода и кнопка добавить. В поле я ввожу цели и добавляю их в бд в методе onClick. С бд я считую данные с помощью FirebaseListAdapter в методе displayAllGoals() и вывожу их в лист. На список я вешаю контекстное меню для редактирования и удаления. И вот мне нужно реализовать удаление через меню. Я не знаю как найти элемент из списка и удалить его из бд.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.todo_activity);
listView = findViewById(R.id.items);
registerForContextMenu(listView);
myRef = FirebaseDatabase.getInstance().getReference();
Button btn_add = btn_add = findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText et_goal = findViewById(R.id.et_goal);
if (et_goal.getText().toString().isEmpty()){
Toast.makeText(getApplicationContext(), "Введите текст!", Toast.LENGTH_SHORT).show();
return;
}
myRef.child("Goals").child(user.getUid()).push().setValue(et_goal.getText().toString());
et_goal.setText("");
}
});
displayAllGoals();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, 1, 0, "Edit");
menu.add(0, 2, 0, "Delete");
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case 2 :
// I need to realize this method!!!
break;
}
return super.onContextItemSelected(item);
}
private void displayAllGoals() {
adapter = new FirebaseListAdapter<String>(this, String.class, R.layout.goal,
myRef.child("Goals").child(user.getUid())) {
@Override
protected void populateView(View v, String s, int position) {
TextView textView = v.findViewById(R.id.textView1);
textView.setText(s);
}
};
listView.setAdapter(adapter);
}
Ответы (2 шт):
я не совсем понимаю вопрос, но если ты хочешь удалить данные из базы данных firebase с помощью кода, то попробуй это
app.database().ref('/goals/' + goalId).remove()
а если ты хочешь удалть данные вручную, то просто наводишь курсор на строчку которую хочешь удалить и нажимаешь на появившийся справа крестик
Получить позицию элемента в списке в onContextItemSelected можно так:
@Override
public boolean onContextItemSelected(MenuItem item) {
...
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int index = info.position;
...
}
Далее используем найденый индекс для удаления:
DatabaseReference item=adapter.getRef(position) ;
item.removeValue();
Для этого потребуется FirebaseListAdapter. Нужно либо его сохранить при создании либо достать из listView:
FirebaseListAdapter<String> adapter = (FirebaseListAdapter<String>)listView.getAdapter();
Итого приблизительно так:
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case 2 :
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int index = info.position;
FirebaseListAdapter<String> adapter = (FirebaseListAdapter<String>)listView.getAdapter();
DatabaseReference item=adapter.getRef(position) ;
item.removeValue();
break;
}
return super.onContextItemSelected(item);
}
