2017-07-25 5 views
0

私はマップにいくつかのマーカーを持っています。それらのそれぞれに、私はカスタムinfoWindowを膨らませたい。マーカーにinfoWindowの異なるレイアウトを追加します

私が抱えている問題は、infoWindowがそれぞれ同じであるということです。私はいくつかのスタックスレッドを読んだが、私はそれを修正する方法を考え出していない。

public void loadInfoWindow(final String url, final CharSequence title) { 
     mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 


      @Override 
      public View getInfoWindow(Marker arg0) { 
       arg0.getId(); 
       View v = getActivity().getLayoutInflater().inflate(R.layout.layout_info_window, null); 
       Button info = (Button) v.findViewById(R.id.infoButton); 
       info.setText(title); 
       BitmapLayout back = (BitmapLayout) v.findViewById(R.id.bitmapBackground); 
       Picasso.with(getContext()).load(url).into(back); 

       return v; 

      } 

      @Override 
      public View getInfoContents(Marker arg0) { 

       return null; 
      } 
     }); 

    } 

私はそのためセッターであること何かについてsetInfoWindowAdapterを読み、情報ウィンドウ私はカスタムを膨らませる

 for (int i = 0; i<cityObjects.size(); i++){ 
      CityObject cObject = cityObjects.get(i); 
      Coordinates loc = cObject.getCoordinates(); 
      LatLng pos = new LatLng(loc.getLatitude(), loc.getLongitude()); 
      mMap.addMarker(new MarkerOptions().position(pos).title(cObject.getName())); 
      loadInfoWindow(cObject.getImgs().get(0), cObject.getName()); 

      builder.include(pos); 
     } 

メソッドマップにマーカーを追加

スニペットは、情報ウィンドウを上書きしますforループが反復するたびに誰かがマーカを認識するための良い解決策を持っていますので、私は別のレイアウトを膨らませることができますか?

+1

あなたはマーカーごとに長い緯度を持っていますので、マーカーをクリックするとマーカーの緯度を長く比較してレイアウトを生成できます。 –

+0

@chetanprajapat偉大な、それは動作します!ビッグ感謝 – Viktor

+0

いつも歓迎... –

答えて

0

に私はこれを見ていないため少し愚かな感じが、私は解決策を記述するために管理しました。 @chetanprajapatのおかげで正しい軌道に乗ることができました。

私はマーカー(位置、タイトル)に関するすべての情報を持っているので、タイトルを確認して適切なレイアウトを膨張させる作成されたクラスに渡すことができます。

public class CustomInfoWindowAdapter implements GoogleMap.InfoWindowAdapter{ 
      @Override 
      public View getInfoWindow(Marker arg0) { 

       for (CityObject cityObject : cityObjects){ 
        if (arg0.getTitle().equals(cityObject.getName())){ 
         View v = getActivity().getLayoutInflater().inflate(R.layout.layout_info_window, null); 
         Button info = (Button) v.findViewById(R.id.infoButton); 
         info.setText(cityObject.getName()); 
         BitmapLayout back = (BitmapLayout) v.findViewById(R.id.bitmapBackground); 
         Picasso.with(getContext()).load(cityObject.getImgs().get(0)).into(back); 
         return v; 
        } 
       } 
       return null; 
      } 

      @Override 
      public View getInfoContents(Marker arg0) { 

       return null; 
      } 
    } 

正しいレイアウトを膨張させるためのクラスを作成し、私はちょうど、再び新しいInstance

CustomInfoWindowAdapter
mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter()); 

に助けを@chetanprajapatのおかげで、アダプタを設定します。

0

marker.setTag()とmarker.getTag()を使用できます。あなたは一例に

mMap.addMarker(new MarkerOptions().position(pos).title(cObject.getName())).setTag(1); 

mMap.addMarker(new MarkerOptions().position(pos).title(cObject.getName())).setTag(2); 

をmarker.forにタグを付けることができ、その後、loadInfoWindow方法

if((int)arg0.getTag==1) 
    { 
    //do something 
    } 
else{ 
//do something 
} 
関連する問題