2

マップにマーカーを追加しています(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); 
     } 
} 

はここnPcLatPcLngP私はマーカーを削除しようとしている方法も、それらに割り当てられた値を取得している方法は次のとおりです。ここで

の方法ですアルゴリズム:ここでは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で利用可能な文字列のいずれとも等しくないマーカーを削除しますか?

私が許している限り、それほど明確な質問はしないでください。あなたが私がここで欲しいものを達成するためのより良い、より簡単な方法を私に与えることができれば、本当に感謝します。

+0

をそのタイトルがPAから文字列のいずれかに等しくない場合、あなたはマーカーを削除します。つまり、削除されないようにするには、すべての文字列と等しい必要があります –

答えて

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 –

関連する問題