맵에 몇 가지 (2-13) 마커를 추가하고 있습니다. 마커는 한꺼번에 추가되지 않지만 데이터 변경은 Firebase
에서 수신되며 새 사용자가 추가되면지도에서 위치가 표시된 아이콘이 추가됩니다.마커의 제목을 FirebaseDatabase에서 가져온 문자열과 비교 한 후 마커 배열과 마커 배열을 제거 할 수 없습니다.
이 방법은 다음과 같습니다
여기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
있습니다 자신에게 할당 된 값을 받고 또한 내가 마커 제거하기 위해 노력하고있어 방법 :
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();
}
}
}
}
}
}
...
});
내 논리를/알고리즘 : 아래에서 사용할 수있는 pName
을 가져오고 일치하는 경우 pMarker
의 제목과 일치 시키려고합니다. pMarker가 제거되지 않아야하고 pMarker
제목과 같은 문자열이 없으면이 마커가 제거되어야합니다. 문제는 제목 대신 marker
는 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
최근에 추가 된 마커가 점점 : 여기
는 같은 데이터 구조가 어떻게 표시되는지를 보여줍니다 제거되었습니다!이렇게, 에서 사용할 수있는 문자열 중 제목과 일치하지 않는 마커를 제거하는 방법은 입니까?
명확한 질문이 없으므로 용서해주십시오. 최선의 방법으로 설명해 드렸습니다. 내가 원하는 것을 얻을 수있는 더 나은 방법을 저에게 줄 수 있다면 정말 고마워요.
을 제목 펜실바니아에서 문자열 중 하나 동일하지 않은 경우에는 마커를 제거 :
이 작동합니다. 즉, 제거하지 않으려면 모든 문자열과 동일해야합니다. –