2

맵에 몇 가지 (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, cLatPcLngP 있습니다 자신에게 할당 된 값을 받고 또한 내가 마커 제거하기 위해 노력하고있어 방법 :

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 제목과 같은 문자열이 없으면이 마커가 제거되어야합니다. 문제는 제목 대신 markerArrayList<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 

최근에 추가 된 마커가 점점 : 여기

는 같은 데이터 구조가 어떻게 표시되는지를 보여줍니다 제거되었습니다!

이렇게, 에서 사용할 수있는 문자열 중 제목과 일치하지 않는 마커를 제거하는 방법은 입니까?

명확한 질문이 없으므로 용서해주십시오. 최선의 방법으로 설명해 드렸습니다. 내가 원하는 것을 얻을 수있는 더 나은 방법을 저에게 줄 수 있다면 정말 고마워요.

+0

을 제목 펜실바니아에서 문자열 중 하나 동일하지 않은 경우에는 마커를 제거 :

이 작동합니다. 즉, 제거하지 않으려면 모든 문자열과 동일해야합니다. –

답변

3

실제로 전체 제목 목록을 채우고 모든 마커를 반복해야합니다.

그런 다음 마커를 반복하면서 제목 목록에 마커의 제목이 포함되어 있는지 확인하십시오. 그렇지 않은 경우 제거하십시오. 당신의 코드에서

// below is how I'm trying to remove markers 
// First, populate the title list 
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { 
    Map<String, String> map = (Map<String, String>) childSnapshot.getValue(); 
    pA.add(map.get("pName")); 
} 

// Then, iterate through the Markers 
// Remove the Markers whose title is not contained in the title list 
if (markersList.size() > 0) { 
    for (int i = 0; i < markersList.size(); i++) { 
    Marker m = markersList.get(i); 
    if (!pA.contains(m.getTitle())) { 
     m.remove(); 
    } 
    } 
} 
+0

많은 사람에게 감사드립니다! http://stackoverflow.com/q/41993441/6144372 –

+0

관련 질문에 도움을 얻을 수 있습니까? http://stackoverflow.com/q/42252017/6144372 –