2013-03-05 174 views
1

我正在使用Google Maps v2 API並在地圖上放置標記。標記表示不同的東西,所以我想爲每個標記類設置一個自定義InfoWindow佈局。問題在於覆蓋getInfoContentsgetInfoWindow(每次選擇標記時都會調用它)將爲每個標記提供相同的佈局。針對不同標記的不同InfoWindow

有沒有不同的方式來做到這一點,以便我可以爲不同組的標記充氣不同的佈局?

回答

3

問題是,重寫的getInfoContents和getInfoWindow,每次選擇標記時都會調用它,將爲每個標記提供相同的佈局。

他們當然不必這樣做。您通過Marker作爲每種方法的參數,因此可根據Marker中的信息做出不同的處理。

+0

同意 - 你可以在每個標記使用不同的信息。例如標題和片段可以標記A和標記B之間的不同。 。然而,在這兩種情況下getInfoContents/getInfoWindow的XML佈局膨脹是不是相同? – Rarw 2013-03-05 18:04:46

+0

@Rarw:不一定,你是膨脹的人,你可以使用像'if'和'else'這樣的數據控制結構來 – CommonsWare 2013-03-05 18:09:08

+0

得到它 - 我將添加一個鍵到其中一個標記值並檢查這種方式。 – Rarw 2013-03-05 18:16:25

1

但你可以。根據您的支票在充氣標記的InfoWindow之前進行檢查並膨脹不同的佈局。

當您在public View getInfoContents(Marker args)方法中收到Marker時,將創建一個if語句,該語句將測試此標記是否與您想要的類型相對應,並基於此充氣相關佈局。

你可以檢查例如什麼位置運行

clickMarkerLatLng = args.getPosition();

標記的座標,並在此determin什麼InfoWindow應提交爲主。

1

它非常簡單 map.setInfoWindowAdapter(新InfoWindowAdapter(){

  @Override 
      public View getInfoWindow(Marker marker) { 
       // TODO Auto-generated method stub 
       View v; 
       LayoutInflater inflator=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
       v=inflator.inflate(R.layout.info_inflator, null); 
       TextView text=(TextView)v.findViewById(R.id.title); 
       Button ok_button=(Button) v.findViewById(R.id.ok_button); 
       text.setText(marker.getTitle()); 
       ok_button.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 

        } 
       }); 

       return v; 
      } 

      @Override 
      public View getInfoContents(Marker marker) { 
       // TODO Auto-generated method stub 
       return null; 
      } 
     }); 
+0

你可以比較裏面getifowindow ...那裏你有標記來比較 – 2013-06-04 11:13:51

+0

我最終做的是添加一個鍵/標記到片段的開頭,從標記中提取該標記傳遞給getinfowindow,然後使用switch語句控制顯示的窗口 – Rarw 2013-06-04 12:31:49

相關問題