2015-02-01 7 views
5

Ich habe ein Map-Fragment in einem anderen Fragment. Das funktionierte schon vorher, aber ich denke, es hat versaut, nachdem ich die Google Play Services-Bibliothek aktualisiert habe. Was ist falsch? fragment_map.xml: getSupportFragmentManager(). FindFragmentById (R.id.map) hat null zurückgegeben

<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; 
} 

Antwort

20

hatte ich

getActivity().getSupportFragmentManager() 

zu

getChildFragmentManager() 

zu ändern, um es zu arbeiten. Keine Ahnung, warum es vor ein paar Tagen perfekt funktioniert hat.

+1

Sie haben meinen Tag gerettet –

0

In onCreateView, sollten Sie nicht tun. Verwenden Sie die vorgeschlagene Methode in der offiziellen Dokumentation für Inter-Fragment-Kommunikation. Hier denke ich, dass dein Problem mit dem Timing zusammenhängt. Nicht alle Fragmente werden synchron erstellt oder verwaltet. Außerdem bin ich nicht sicher, ob Sie getActivity() von onCreateView() aufrufen können - da Fragmente erst nach onCreateView() in den ActivityCreated() - Callback gelangen.

1

This is the answer:

Hinweis: Sie können kein Layout in ein Fragment aufzublasen, wenn das Layout ein Fragment enthält. Verschachtelte Fragmente werden nur unterstützt, wenn sie dynamisch zu einem Fragment hinzugefügt werden.

Verwandte Themen