2015-04-17 2 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- Программно-с-maps-api-v2 – Hulk

+0

Вы не должны вставлять «фрагмент» внутри другого «фрагмента». Было бы лучше вставить его в новый 'activity' через' FragmentTransaction', если вы не хотите использовать XML-макет. – 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);» для обработки карты и переопределения метода onMapReady (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

Смежные вопросы