6

現在、使用時に GoogleMap オブジェクトのすべてのマーカーを表示または非表示に設定する ActionBar-Button を実装しようとしています。私の問題は、マーカーが作成されてマップに表示された後、すべてのマーカーへの参照を取得する方法がわからないことです。コードの他の部分でもアクセスできるように、すべてのマーカー オブジェクトを配列に格納するソリューションを探しています。このアプローチは合理的ですか?

ここに私が考えているものがあります:

 private Marker[] mMarkerArray = null;
 for (int i = 0; i < MainActivity.customers.size(); i++) {

     LatLng location = new LatLng(mData.lat, mData.lng);

     Marker marker = mMap.addMarker(new MarkerOptions().position(location)
                          .title(mData.title)
                          .snippet(mData.snippet));
     mMarkerArray.add(marker);                      
   }

別のメソッド内ですべてのマーカーを非表示に設定します。

for (int i = 0;  i < mMarkerArray.length;; i++) {
    mMarkerArray[i].setVisible(false);
}

Marker[]-array にマーカーを追加することを拒否します。どうすれば達成できますか?

mMarkerArray.add(マーカー) が機能しない

4

3 に答える 3

17

私のcustomerListに座標のない顧客がいるという答えも見つけました->(0,0; ​​0,0)。このブログにインスパイアされました。

ArrayList を初期化します。

private ArrayList<Marker> mMarkerArray = new ArrayList<Marker>();

マーカーをマップと mMarkerArray に追加します。

for (int i = 0; i < MainActivity.customers.size(); i++) {
        Customer customer = MainActivity.customers.get(i);
        if (customer.getLon() != 0.0) {
            if (!customer.isProspect()) {
                Data mData= new Data(customer.getLat(),customer.getLon(),customer.getName(),
                        customer.getOrt());

                LatLng location = new LatLng(mData.lat, mData.lng);

                Marker marker = mMap.addMarker(new MarkerOptions().position(location)
                          .title(mData.title)
                          .snippet(mData.snippet));

                mMarkerArray.add(marker); 
}}} 

すべてのマーカーを非表示に設定

for (Marker marker : mMarkerArray) {
    marker.setVisible(false);
    //marker.remove(); <-- works too!
}
于 2013-08-08T14:40:05.653 に答える
2

交換

private Marker[] mMarkerArray = null;

private List<Marker> mMarkerArray = new ArrayList<Marker>();

そしてあなたは大丈夫なはずです。

Android Maps Extensionsを使用している場合は、次を使用してすべてのマーカーを単純に反復処理できます。

for (Marker marker : googleMap.getMarkers()) {
    marker.setVisible(false);
}

Listすべての独自のものを持たずにMarker

于 2013-08-08T14:29:02.617 に答える
1

or内にCollectionofを保持してから呼び出して「非表示」にし、それらを追加して再び表示することができます。各アクションの後に呼び出して、マップを再描画します。OverlayItemActivityFragmentMapView.getOverlays().clear()MapView.invalidate()

于 2013-08-08T12:59:56.830 に答える