2015-04-17 60 views
8

我想以編程方式將此xml片段添加到其他片段。 這可能嗎?如何以編程方式添加地圖片段

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
class="com.google.android.gms.maps.SupportMapFragment" /> 
+0

http://stackoverflow.com/questions/13733299/initialize-mapfragment-以編程方式使用map-api-v2 – Hulk

+0

您不應該在另一個「fragment」中插入「fragment」。如果您不想使用XML佈局,最好通過「FragmentTransaction」將其插入到新的「活動」中。 – moictab

回答

13

在XML中,您可以添加一個佔位符容器:

<FrameLayout 
     android:id="@+id/mapContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

然後在代碼中,你可以這樣做:

FragmentManager fm = getChildFragmentManager(); 
SupportMapFragment supportMapFragment = SupportMapFragment.newInstance(); 
fm.beginTransaction().replace(R.id.mapContainer, supportMapFragment).commit(); 
+0

無法解析方法:getChildFragmentManager();還將min api更新爲17,然後如何解決它? –

+2

@JosephMekwan關於getChildFragmentManager()。要明確一點,如果你試圖在Activity中插入片段,你必須使用getSupportFragmentManager()或getFragmentManager()。如果你想要有內部片段,getChildFragmentManager()在片段的哪裏使用。如果你有API 17或更高版本,它必須在那裏。 –

+1

這是正確的,但你必須添加「supportMapFragment.getMapAsync(this);」來處理地圖並覆蓋地圖前導(GoogleMap googleMap)方法 – Terranology

2

作出這樣一個佈局:

<FrameLayout 
    android:id="@+id/layout_mapContainer" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:layout_weight="0" 
    android:background="@android:color/transparent" 
    android:orientation="vertical" > 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent" /> 
</FrameLayout> 

在活動聲明:

FrameLayout mapLayout = (FrameLayout)findViewById(R.id.layout_mapContainer); 

INITIALISE地圖是這樣的:

private void initialiseMap() { 

     FragmentTransaction mTransaction = getSupportFragmentManager().beginTransaction(); 
     SupportMapFragment mFRaFragment = new MapFragmentActivity(); 
     mTransaction.add(mapLayout.getId(), mFRaFragment); 
     mTransaction.commit(); 

     try { 
      MapsInitializer.initialize(context); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

這裏MapFragmentActivity是類擴展SupportMapFragment

相關問題