In the onCreate
method, I am making use of the SupportMapFragment
to show a map.
SupportMapFragment fragment = new SupportMapFragment();
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, fragment).commit();
In conjunction to this, I would like to add a marker. The problem is when the call to getMap
is null, when can I try again? Is there an event I can register for or is my approach in and of itself wrong?
mMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
if(mMap == null)
//what do I do here?
The map is in fact displaying on the phone however I appear to be having no luck in obtaining the reference to add markers.
UPDATE:
The reason I was creating the SupportMapFragment
via the constructor is because the typical setContentView
was crashing and did not work. This put me in the predicament where I could not obtain my reference in the onCreate
method since I was in fact creating the SupportMapFragment
at that time. In further investigation, it appears my setContentView
issue was a byproduct of not having both the Google-play-services jar AND the module/src set up as part of the overall project. Upon doing BOTH of these, setContentView
now works and I can obtain the reference via getMap()
as I would expect.
lots.xml...
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
LotsActivity.java...
public class LotsActivity extends FragmentActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lots);
GoogleMap mMap;
mMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
if(mMap == null)
//this should not occur now
}
EDIT: getMap
is deprecated now
The problem is when the call to getMap is null, when can I try again?
That depends upon the nature of the problem.
If you set up the SupportMapFragment
via the <fragment>
element in the layout, you can call getMap()
successfully in onCreate()
. But, if you create the SupportMapFragment
via the constructor, that's too soon -- the GoogleMap
does not yet exist. You can extend SupportMapFragment
and override onActivityCreated()
, as getMap()
is ready by then.
However, getMap()
can also return null
for a bigger problem, such as Google Play Services not being installed. You would need to use something like GooglePlayServicesUtil.isGooglePlayServicesAvailable()
to detect this condition and deal with it however you wish.