Убрать маркер и одновременно документ в пожарном депо - PullRequest
0 голосов
/ 30 апреля 2020

Когда я создаю маркер, я каким-то образом хочу, чтобы информация о документе FirebaseFirestore, который связан с ним, следовала за ним, чтобы позже, когда я захочу удалить маркер, маркер FirebaseFirestore удалялся вместе с ним.

В моем случае, когда маркер нажат, а пользователь долго щелкает информационное окно, он должен удалить маркер, но также и документ. Лог c для 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();
                            }
                        }
                    });

Обновление: вопрос был отредактирован / обновлен, чтобы прояснить цель, поскольку я не достаточно прояснил это.

1 Ответ

1 голос
/ 30 апреля 2020

Если вы хотите удалить документ пожарного хранилища маркера, используя только маркер, отметьте маркер, когда он создан, его идентификатором документа пожарного хранилища.

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 , чтобы получить выбранный маркер при нажатии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...