SupportMapFragment.getmap() returns null
Solution 1
map takes some time to load, so you need to run your code in handler -->
Handler handler = new Handler();
handler.postDelayed(new Runnable()
@Override
public void run() {
GoogleMap googleMap = SupportMapFragment.newInstance(new GoogleMapOptions().zOrderOnTop(true)).getMap();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.map_content, fragment);
ft.commit();
if(googleMap != null) {
googleMap.addMarker(new MarkerOptions().position(result)).setVisible(true);
// Move the camera instantly to location with a zoom of 15.
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(result, 15));
// Zoom in, animating the camera.
googleMap.animateCamera(CameraUpdateFactory.zoomTo(14), 2000, null);
googleMap.getUiSettings().setZoomControlsEnabled(false);
googleMap.getUiSettings().setCompassEnabled(false);
googleMap.getUiSettings().setMyLocationButtonEnabled(false);
handler.removeCallbacksAndMessages(null);
}
else {
handler.postDelayed(this, 500);
}
}, 500);
Solution 2
Just try using the following code. It worked for me.
public class MapFragment extends SupportMapFragment {
GoogleMap mapView;
private Context context;
@Override
public void onCreate(Bundle arg0) {
super.onCreate(arg0);
}
@Override
public View onCreateView(LayoutInflater mInflater, ViewGroup arg1,
Bundle arg2) {
View view = super.onCreateView(mInflater, arg1, arg2);
return view;
}
@Override
public void onInflate(Activity arg0, AttributeSet arg1, Bundle arg2) {
super.onInflate(arg0, arg1, arg2);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
context = getActivity();
mapView = getMap();
}
}
Solution 3
There's a bunch of duplicate questions that go around the same topic... I can't seem to figure out how to flag it as a duplicate and then put one answer on it...
Here's the link to the other one: Android SupportMapFragment.getMap() returns null
And the potential answer posted there as well:
Check your layout xml file. I noticed that I wasn't referencing: android:name="com.google.android.gms.maps.SupportMapFragment" but rather: android:name="com.google.android.gms.maps.MapFragment"
The name should be: android:name="com.google.android.gms.maps.SupportMapFragment"
Solution 4
It happened with me once in a new purchased device with Google play services not yet installed /updated. With other notes mentioned of course also consider this one.
Solution 5
An up to date solution for this problem is to use getMapAsync (OnMapReadyCallback callback) instead.
ranjith
Updated on June 06, 2022Comments
-
ranjith almost 2 years
I'm trying to load SupportMapFragment dynamically in a fragment, here is my onCreateView() method:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View contentView = inflater.inflate(R.layout.frag_map_layout, null); shopDtos=ShopListFragment.shopDtos; fragment =SupportMapFragment.newInstance(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.map_content, fragment); ft.commit(); map = fragment.getMap(); mapMarker = map.addMarker(new MarkerOptions().position(new LatLng(0, 0)) .icon(BitmapDescriptorFactory .fromResource(R.drawable.maps_pin))); return contentView; }
Unfortunately, I get the GoogleMap map as
null
. Any suggestions on to how create a mapfragment dynamically? -
ranjith over 10 yearsthe map is loading but the problem is same can't add a marker to the map
-
IgorGanapolsky over 10 yearsWhy is a Handler necessary here? Why not do this code in onActivityCreated()?
-
brainmurphy1 almost 10 yearsHere is a link to a more robust solution: stackoverflow.com/a/19109093/1429640
-
Mr Roshan Pawar almost 10 years@brainmurphy1 thanks for sharing the solution, I think your solution is simple and clean.
-
Tharaka Devinda over 9 yearsThis was the real problem for me! Thanks a lot.!