2016-03-29 151 views
0

我想要在地圖上可視化多個標記。它的完美展示和onMarkerTap從數據庫檢索的顯示信息爲JSON。我想要做的是在自定義佈局或底部工作表中顯示信息。當用戶點擊標記時,底部表單將出現,並顯示與該標記相關的信息。我正在使用下面的代碼來顯示多個標記。這裏MapViewListener部分onTapMarker我已經設置了marker.getTitle()在Toast中顯示標記名稱以進行測試。但它爲所有標記顯示相同的標記名稱。但在地圖上顯示的infoWindow中顯示精確的數據。我該如何解決這個問題?使用Android Mapbox SDK顯示多個標記的自定義infoWindow

 FloatingActionButton layerButton = (FloatingActionButton)findViewById(R.id.layer); 
     layerButton.setOnClickListener(new View.OnClickListener() { 

      public void getData() { 
       String url = Config.DATA_URL; 

       StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         showJSON(response); 
        } 
       }, 
         new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 
           Toast.makeText(MainActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show(); 
          } 
         }); 


       requestQueue.add(stringRequest); 
      } 

      public void showJSON(String response){ 

       try { 
        JSONObject jsonObject = new JSONObject(response); 
        JSONArray jsonArray = jsonObject.getJSONArray(Config.JSON_ARRAY); 
        for (int i=0;i<jsonArray.length();i++){ 
         JSONObject singleMarker = jsonArray.getJSONObject(i); 
         String poi_name = singleMarker.getString(Config.POI_NAME); 
         String poi_latitude = singleMarker.getString(Config.POI_LATITUDE); 
         String poi_longitude = singleMarker.getString(Config.POI_LONGITUDE); 

         Double dbl_latitude = Double.parseDouble(poi_latitude); 
         Double dbl_longitude = Double.parseDouble(poi_longitude); 


         final Marker marker = new Marker(poi_name, poi_thananame, new LatLng(dbl_latitude, dbl_longitude)); 
         marker.setMarker(getResources().getDrawable(R.mipmap.poi_shopping)); 
         mapView.addMarker(marker); 

         mapView.setMapViewListener(new MapViewListener() { 
          @Override 
          public void onShowMarker(MapView pMapView, Marker pMarker) { 
          } 

          @Override 
          public void onHideMarker(MapView pMapView, Marker pMarker) { 
          } 

          @Override 
          public void onTapMarker(MapView pMapView, Marker pMarker) { 
           Toast.makeText(getApplicationContext(), " Name: "+marker.getTitle()+, Toast.LENGTH_LONG).show(); 
          } 

          @Override 
          public void onLongPressMarker(MapView pMapView, Marker pMarker) { 
          } 

          @Override 
          public void onTapMap(MapView pMapView, ILatLng pPosition) { 
          } 

          @Override 
          public void onLongPressMap(MapView pMapView, ILatLng pPosition) { 
          } 
         }); 

        } 


       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
// 
//    mapView.setCenter(new LatLng(dbl_latitude, dbl_longitude)); 
//    mapView.setZoom(18); 

      } 

      //////END OF GET DATA/////// 

      @Override 
      public void onClick(View v) { 
       clearLayerFAB.setVisibility(View.VISIBLE); 
       getData(); 
      } 

     }); 

回答

1

高興地幫助你與這一個。我假設您使用的是Mapbox Android SDK的3.2.0版本。如果是這樣,我發現上面發佈的代碼有兩個問題。

1)您在for循環中設置您的偵聽器,因此每次添加標記時只需重新設置偵聽器。

2)3.2.0和更新的4.0.0都有一個setOnMarkerClickListener方法,你可以調用它,並且你可以添加你的烤麪包。所以它看起來像這樣:

for (int i=0;i<jsonArray.length();i++){ 

    // Add your markers here 

} 

// Setup your listener here 
mapView.setOnMarkerClickListener(new MapboxMap.OnMarkerClickListener() { 
    @Override 
    public boolean onMarkerClick(@NonNull Marker marker) { 

    Toast.makeText(getApplicationContext(), " Name: "+marker.getTitle()+, Toast.LENGTH_LONG).show(); 

    return false; 
    } 
}); 

希望這有助於!

+0

我正在使用0.7.4 SDK版本。我正在使用tilemill創建的服務器使用自定義磁貼。這就是我使用舊SDK的原因。不幸的是,它不支持setOnMarkerClickListner。 Thogh解決了。我忘了叫pMarker而不是標記。這裏是... Toast.makeText(getApplicationContext(),「Name:」+ pMarker.getTitle(),Toast.LENGTH_LONG).show(); –

相關問題