Чтобы решить мою проблему, я переопределил onChildChanged метод FirebaseRecyclerAdapter следующим образом:
public class MyFragment extends Fragment {
private static final String TAG = MyFragment.class.getSimpleName();
private FirebaseRecyclerAdapter<Entry, EntryViewHolder> mAdapter = null;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
// Setup adapter
FirebaseRecyclerOptions<Entry> options = new FirebaseRecyclerOptions.Builder<Entry>()
.setQuery(query, Entry.class)
.build();
// Setup adapter
mAdapter = new FirebaseRecyclerAdapter<Entry, EntryViewHolder>(options) {
@Override
public EntryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
return view;
}
@Override
protected void onBindViewHolder(@NonNull final EntryViewHolder viewHolder, int position, @NonNull final Entry model) {
// Fill view holder
...
}
@Override
public void onChildChanged(@NonNull ChangeEventType type, @NonNull DataSnapshot snapshot, int newIndex, int oldIndex) {
super.onChildChanged(type, snapshot, newIndex, oldIndex);
// If child is removed, deleted its associated file on device if exists
if (type.equals(ChangeEventType.REMOVED)) {
// Get file name from delete entry
final String fileName = (String) snapshot.child("fileName").getValue();
// Check in file exists in local, then delete it
File file = new File(getActivity().getFilesDir() + "/" + fileName);
if (file.exists()) {
file.delete();
}
}
}
};
// Setup recycler view
mRecyclerView.setAdapter(mAdapter);
return view;
}
}
Я использую функцию Firebase, чтобы удалить файл, когда запись удаляется из базы данных реального времени.Таким образом, файл удаляется в облаке и на устройстве (если он уже был загружен на устройство).