マップにマーカーを追加しています(2-13)。一度にマーカーが追加されるのではなく、データ変更がFirebase
から聴かれ、新しいユーザーが追加された場合、その場所のマーカーがマップに追加されます。マーカのタイトルとFirebaseDatabaseからフェッチされた文字列を比較した後、マーカの配列とマップからマーカを削除できません
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();
}
}
}
}
}
}
...
});
マイロジック/:
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);
}
}
はここnP
、cLatP
とcLngP
私はマーカーを削除しようとしている方法も、それらに割り当てられた値を取得している方法は次のとおりです。ここで
の方法ですアルゴリズム:ここではpName
を取得し、一致する場合は利用可能なpMarker
のタイトルと一致させようとしていますpMarkerが削除されるべきではなく、pMarker
のタイトルに等しい文字列がない場合、このマーカーは削除されます。問題は、タイトルの代わりがArrayList<String> pA
で利用可能な文字列のいずれにも等しくないある
-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
、最新で追加されたマーカーが取得されています。ここでは
は次のようなデータ構造が見えるものです削除されました!したがって、へのタイトルは、ArrayList<String> pA
で利用可能な文字列のいずれとも等しくないマーカーを削除しますか?
私が許している限り、それほど明確な質問はしないでください。あなたが私がここで欲しいものを達成するためのより良い、より簡単な方法を私に与えることができれば、本当に感謝します。
をそのタイトルがPAから文字列のいずれかに等しくない場合、あなたはマーカーを削除します。つまり、削除されないようにするには、すべての文字列と等しい必要があります –