当我创建一个标记时,我希望链接到它的FirebaseFirestore文档的信息跟在它后面,这样以后当我想删除标记时,FirebaseFirestore标记也会随之删除。
在我的例子中,当按下一个标记,用户长按infoWindow时,它应该删除标记,但也删除文档。onInfoWindowLongClickListener的逻辑如下:
gMap.setOnInfoWindowLongClickListener(new GoogleMap.OnInfoWindowLongClickListener() {
@Override
public void onInfoWindowLongClick(Marker marker) {
FirebaseFirestore db = FirebaseFirestore.getInstance(); // I guess this is needed.
marker.remove(); // removes marker
}
});
标记被删除了,但我仍然可以在Firestore中看到文档。
我应该使用marker.getTag()
吗?
当我创建标记时,它会变成这样:
btnRetrieveMarkers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("my_collection")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
for(QueryDocumentSnapshot documentSnapshot : task.getResult()){
HashMap hashMap = (HashMap) documentSnapshot.getData();
String status = (String) hashMap.get("Status");
GeoPoint geo = (GeoPoint) hashMap.get("Geopoint");
LatLng latLng = new LatLng(geo.getLatitude(), geo.getLongitude());
Marker mark = gMap.addMarker(new MarkerOptions().position(latLng).title(status)));
mark.setDraggable(true);
// mark.setTag() < -- how to save the info about the document here?
}
}else {
// TODO: handle error here
}
if (task.getResult().isEmpty()) {
Toast.makeText(MapsActivity.this, R.string.no_markers_registered_yet, Toast.LENGTH_LONG).show();
}
}
});
更新:问题已被编辑/更新以澄清目的,因为我对此不够清楚。
如果您想只使用标记删除标记的消防仓库文档,请在创建标记时使用其消防仓库文档id对其进行标记。
Marker marker = mMap.addMarker(new MarkerOptions()
...
);
marker.setTag("[document id]");
当你想删除它时:
FirebaseFirestore db = FirebaseFirestore.getInstance();
String markerId = (String) marker.getTag();
db.collection("[name of the collection]")
.document(markerId)
.delete();
您可能还想实现OnMarkerClickListener,以便在单击时获得选定的标记。