mapFragment.getMap() gibt null zurück
Ich versuche, eine Karte von einem SupportMapFragment aber es gibt null zurück. Von was ich gelesen habe könnte dies sein, weil das fragment ist noch nicht vollständig angezeigt werden und deshalb keine Karte vorhanden ist?! Ich habe versucht Festsetzung es mit executePendingTransactions (), aber bisher ohne Erfolg.
Irgendwelche Ideen wie man es beheben?
Hier ist der code
private GoogleMap map;
private SupportMapFragment mapFragment;
@Override
public void onCreate( Bundle savedInstanceState ) {
//...
super.onCreate( savedInstanceState );
setContentView( R.layout.screen_mission2 );
GoogleMapOptions mapOptions = new GoogleMapOptions();
mapOptions.mapType(GoogleMap.MAP_TYPE_NORMAL)
.compassEnabled(true)
.rotateGesturesEnabled(false)
.tiltGesturesEnabled(false);
android.support.v4.app.FragmentManager myFragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentManager.enableDebugLogging(true);
mapFragment = SupportMapFragment.newInstance(mapOptions);
FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction();
fragmentTransaction.add(R.id.mapFragment, mapFragment);
fragmentTransaction.commit();
myFragmentManager.executePendingTransactions();
if(mapFragment == null) Base.log("mapFragment==null");
if(map==null){
map = mapFragment.getMap();
Base.log("map should have been initialized");
if(map==null) Base.log("map still null");
}
}
Und die layout-Datei:
<fragment
android:id="@+id/mapFragment"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Gibt es die folgenden log -
V/FragmentManager(24224): add: SupportMapFragment{4078c4b8 id=0x7f06003d}
V/FragmentManager(24224): Allocated fragment index SupportMapFragment{4078c4b8 #1 id=0x7f06003d}
V/FragmentManager(24224): moveto CREATED: SupportMapFragment{4078c4b8 #1 id=0x7f06003d}
D/EMR (24224): map should have been initialized
D/EMR (24224): map still null
Hier haben Sie erklärt den
Ja ich erklärte es(Herausgeber des code-Teil, siehe oben)
Wird es initialisiert? Sonst wird es die gleiche sein, wie nichts, d.h.,
nicht mapFragment = SupportMapFragment.newInstance(mapOptions); kümmern? Zumindest wenn(mapFragment == null) Basis.log("mapFragment==null"); erscheint nicht im log
mapFragment
variable?Ja ich erklärte es(Herausgeber des code-Teil, siehe oben)
Wird es initialisiert? Sonst wird es die gleiche sein, wie nichts, d.h.,
null
.nicht mapFragment = SupportMapFragment.newInstance(mapOptions); kümmern? Zumindest wenn(mapFragment == null) Basis.log("mapFragment==null"); erscheint nicht im log
InformationsquelleAutor cos4 | 2013-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, alle code, Referenzen Ihre
GoogleMap
zuonStart()
oderonResume()
. Die map in einer map-fragment ist nicht instanziiert, bis nach dem fragment durchgemacht hatonCreateView
(link), was passiert, wenn die übergeordnete Aktivität Durchlaufen hatonCreate()
. Auch, müssen Sie überprüfen IhreGoogleMap
fürnull
egal, denn wenn die google play services nicht installiert, oder die Karte nicht verfügbar ist aus irgendeinem anderen Grund, wird esnull
.+1 für die Erklärung "warum?" sowie "was?".
InformationsquelleAutor GLee
Richtig.
Tatsächlich die layout-Datei, durch Aufruf von
setContentView()
, und loszuwerden, alle dieFragmentTransaction
Zeug. Sie können dann rufen Sie die bereits erstelltenSupportMapFragment
und Verwendung:Es gibt Entsprechungen in der XML, aber einige Leute haben berichtet, Probleme, wenn diese in Eclipse durch einige Eclipse/ADT bug. Wenn das nicht funktioniert, loszuwerden, die
SupportMapFragment
in die XML, und ersetzen Sie es mit einemFrameLayout
- stick mit Ihrem bestehendenFragmentTransaction
(Gießen das fragment in dieFrameLayout
), aber dann müssen Sie unverzüglich Ihren arbeiten mit derGoogleMap
für etwas (z.B. eine UnterklasseSupportMapFragment
und fügen Sie Ihren code inonActivityCreated()
).Gibt es eine doc zum einstellen der Optionen für die maps in XML? Nicht finden konnte... Ansonsten, wenn ich eine Unterklasse SupportMapFragment ja, ich könnte auch senden Sie eine Absicht aus onActivityCreated() und fangen Sie es, von meiner aktuellen Tätigkeit?!
es doc zum einstellen der Optionen für die maps in XML?" -- developers.google.com/maps/documentation/android/... "könnte ich auch senden Sie eine Absicht aus onActivityCreated() und fangen Sie es, von meiner aktuellen Tätigkeit?" -- Ich sehe nicht, wie, oder was, gut, dass Sie es tun würde. Wenn Sie erstellen Sie Ihre eigenen
SupportMapFragment
Unterklasse, delegieren Konfiguration der anzeigen für die Unterklasse.Danke! Die Idee war: ich brauche zu warten, bis die SupportMapFragment Aktivität angelegt wird, so würde ich ändern onActivityCreated() senden Sie mir eine Absicht, mir zu sagen, dass ich jetzt eine Karte erstellt Objekt, da SupportMapFragment bereit ist.
InformationsquelleAutor CommonsWare
Implementieren Sie
OnMapReadyCallback
, definieren Ihrepublic void onMapReady(GoogleMap map)
und es verwenden, um arbeiten, die auf das fragment, wie es in dem Google-APIInformationsquelleAutor Emaborsa