2016-03-29 25 views
0

マップ上に複数のマーカーを表示しようとしています。完全に表示され、onMarkerは、JSONとしてデータベースから取得した情報を表示します。私がしたいのは、カスタムレイアウトやボトムシートに情報を表示することです。ユーザがマーカをタップすると、そのマーカに関連する情報を含むボトムシートが現れます。私は複数のマーカーの表示に次のコードを使用しています。ここでMapViewListenerセクションonTapMarkerでマーカー名を表示するためにmarker.getTitle()を設定しました。しかし、すべてのマーカーに同じマーカー名が表示されています。しかし、正確なデータを表示している地図上のショーに組み込まれたインフォウインドウで。これをどうすれば解決できますか?Android Mapbox SDKを使用して複数のマーカーのカスタムインフォウィンドウを表示

 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バージョンを使用していると仮定します。もしそうなら、上に掲示されたコードに2つの問題があります。

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バージョンを使用しています。私は、タイルミルで作成されたサーバーからカスタムタイルを使用しています。これが私が古いSDKを使用している理由です。残念ながら、setOnMarkerClickListnerをサポートしていません。それは解決されたThogh。私はむしろpMarkerを呼ぶのを忘れた。ここでは.... Toast.makeText(getApplicationContext()、 "Name:" + pMarker.getTitle()、Toast.LENGTH_LONG).show(); –

関連する問題