2015-02-01 10 views
5

Ho un frammento di mappa all'interno di un altro frammento. Funzionava prima, ma penso che abbia incasinato dopo aver aggiornato la libreria dei servizi di Google Play. Che c'è? fragment_map.xml: getSupportFragmentManager(). FindFragmentById (R.id.map) ha iniziato a restituire null

<fragment 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

MapFragment:

GoogleMap map; 
private static View view; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    if (view != null) { 
     ViewGroup parent = (ViewGroup) view.getParent(); 
     if (parent != null) 
      parent.removeView(view); 
    } 
    try { 

     view = inflater.inflate(R.layout.fragment_map, container, false); 
     map = ((SupportMapFragment) getActivity() 
       .getSupportFragmentManager() 
       .findFragmentById(R.id.map)) 
       .getMap(); // NullPointerException at this line 
     map.getUiSettings().setAllGesturesEnabled(true); 
     map.getUiSettings().setMyLocationButtonEnabled(false); 
     map.getUiSettings().setZoomControlsEnabled(true); 
    } catch (InflateException e) { 
     /* map is already there, just return view as it is */ 
    } 

    return view; 
} 

risposta

20

ho dovuto cambiare

getActivity().getSupportFragmentManager() 

a

getChildFragmentManager() 

per farlo funzionare. Non ho idea del perché funzionasse perfettamente pochi giorni fa.

+1

Hai salvato la mia giornata –

0

In onCreateView, non si dovrebbe fare questo. Utilizzare il metodo suggerito nella documentazione ufficiale per la comunicazione tra frammenti. Qui, penso che il tuo problema sia legato al tempo. Non tutti i frammenti vengono creati o gestiti in modo sincrono. Inoltre, non sono molto sicuro di poter chiamare getActivity() da onCreateView() - perché i frammenti otterranno la chiamata su AttiveCreated() solo dopo onCreateView().

1

This is the answer:

Nota: non è possibile gonfiare un layout in un frammento in cui il layout include un frammento. I frammenti annidati sono supportati solo se aggiunti a un frammento in modo dinamico.

Problemi correlati