2016-07-15 8 views
4

Ich habe ein Problem mit Google Maps, also getSupportFragmentManager(). FindFragmentById gibt immer null zurück. Hast du eine Idee, wie du das lösen kannst? HiergetSupportFragmentManager(). FindFragmentById gibt null für google maps in fragment in android zurück?

ist der Code:

fragment_map.xml: 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.myapp.something.MapFragment"> 
<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment" />     
</FrameLayout> 

MapsFragment.java:

public class MapFragment extends Fragment implements OnMapReadyCallback, android.location.LocationListener 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    SupportMapFragment mapFragment = (SupportMapFragment) this.getActivity().getSupportFragmentManager().findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
... 

Ich habe Google Maps in Aktivität und es funktioniert mit Code:

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

Ich versuche, benutze das im Fragment, weil ich Maps in Fragment brauche, nicht in Aktivität, aber es funktioniert nicht.

Ich habe versucht:

  • diesen Code Aufruf in "onCreateView" -Funktion
  • SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
  • GoogleMap mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap(); ist veraltet und Anwendung abstürzt
  • SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); und ähnliche Variationen, aber in allen Fällen, die ich bekommen null für mapFragment.

Wissen Sie, wie ich dieses Problem lösen könnte?

+0

Du hast 'onCreateView' für Fragmente zu verwenden. Könnten Sie das Protokoll hier veröffentlichen, damit wir wissen, was der Fehler ist? –

+0

Wenn ich 'onCreateView' verwende, bekomme ich immer noch diesen Fehler. Sie können Fehlerbericht in meiner Frage –

+0

Ich habe eine Lösung gefunden. Danke :) –

Antwort

9

Das Problem besteht darin, dass Sie versuchen, den FragmentManager der Aktivität zu verwenden, und Sie sollten den untergeordneten FragmentManager des Fragments verwenden.

Entfernen Sie die onCreate() Überschreibung in dem Fragment, und fügen Sie ein onCreateView() außer Kraft setzen, wenn Sie das Layout aufblasen und getMapAsync() nennen:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_map, container, false); 

    SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); 

    mapFragment.getMapAsync(this); 

    return rootView; 
} 
+0

Tnx für die Antwort, aber dieser Code funktioniert auch nicht. 'findFragmentById' gibt immer noch null zurück. –

+1

Es tut mir leid, es war mein Fehler, aber es funktioniert !!! Vielen Dank! :) –

+0

Fertig. Tnx nochmal :) –