Ich füge ein paar (2-13) Markierungen auf der Karte hinzu. Die Markierungen werden nicht alle gleichzeitig hinzugefügt, stattdessen wird die Datenänderung von Firebase
abgehört. Wenn ein neuer Benutzer hinzugefügt wurde, wird eine Markierung mit seinem Standort auf der Karte hinzugefügt.Fehler beim Entfernen des Markers aus einem Array von Markern sowie aus Map, nachdem der Titel der Markers mit aus FirebaseDatabase abgerufenen Strings verglichen wurde
Hier ist, wie:
public void addMarkers() {
mMap.clear();
vMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(vLat), Double.parseDouble(vLng))).title("Title" + v.trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
markersList.add(venueMarker);
for (int i=0; i<nP.size(); i++) {
pMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.valueOf(cLatP.get(i)), Double.valueOf(cLngP.get(i)))).title(nP.get(i).trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
markersList.add(pMarker);
}
}
Hier ist, wie nP
, cLatP
und cLngP
sind Werte bekommen, die ihnen zugewiesen und auch, wie ich versuche, die Markierung zu entfernen:
aReference.child(rID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
aReference.child(rID).child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
if (dataSnapshot.hasChild("pName") && dataSnapshot.hasChild("currentLat") && dataSnapshot.hasChild("currentLng")) {
Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
nP.add(map.get("pName"));
cLatP.add(map.get("currentLat").trim());
cLngP.add(map.get("currentLng").trim());
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
addMarkers();
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setMapToolbarEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mMap.setMaxZoomPreference(19.0f);
mMap.setMyLocationEnabled(true);
}
});
}
}
}
...
});
if (pA != null) {
pA.clear();
}
// below is how I'm trying to remove markers
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
Map<String, String> map = (Map<String, String>) childSnapshot.getValue();
pA.add(map.get("pName"));
if (markersList.size() > 0) {
for (int i = 0; i < pA.size(); i++) {
if (!pMarker.getTitle().equals(pA.get(i))) {
pMarker.remove();
}
}
}
}
}
}
...
});
Meine Logik/Algorithmus: Hier unten bin ich versuche, die pName
zur Verfügung zu bekommen und versuchen, es mit verfügbaren pMarker
Titel zu vergleichen, wenn es übereinstimmt dann sollte pMarker nicht entfernt werden und wenn keine Zeichenkette gleich pMarker
s Titel ist, dann sollte dieser Marker entfernt werden.
Hier ist, was Datenstruktur wie folgt aussieht:
-app
-child
-rID
-uniqueID1
-userID1
-key: value
-key: value
-pName: value1
-currentLat: value1
-currentLng: value1
-uniqueID2
-userID2
-key: value
-key: value
-pName: value2
-currentLat: value2
-currentLng: value2
-uniqueID3
-userID3
-key: value
-key: value
-pName: value2
-currentLat: value2
-currentLng: value2
Das Problem ist, dass anstelle des deren Titel in ArrayList<String> pA
verfügbar einem der Strings nicht gleich ist, die der Marker in neueste aufgenommen wird immer entfernt!
So, wie zu entfernen Sie die Markierung, deren Titel ist nicht gleich einer der verfügbaren Zeichenfolge in ?
Bitte verzeihen Sie mir für nicht so klare Frage, aber ich habe es auf die beste Weise beschrieben, die ich kann. Ich würde es wirklich schätzen, wenn Sie mir einen besseren und einfacheren Weg geben können, um das zu erreichen, was ich hier möchte.
in Ihrem Code Sie die Markierung entfernen, wenn der Titel zu einem des Strings aus pA nicht gleich ist. Das heißt, um nicht entfernt zu werden, müsste es allen Strings –