mMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentByTag(MAP_FRAGMENT_TAG);
// We only create a fragment if it doesn't already exist.
if (mMapFragment == null) {
mMapFragment = SupportMapFragment.newInstance();
// Then we add it using a FragmentTransaction.
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(MapLay.getId(), mMapFragment, MAP_FRAGMENT_TAG);
fragmentTransaction.commit();
mMap=mMapFragment.getMap();通过此代码,映射是可见的,但无法访问映射。
mMap=mMapFragment.getMap();显示空值错误如何修复
发布于 2013-10-01 06:05:15
更新1: getMap()是废弃的
最好是使用getMapAsync()的MapFragment/SupportMapFragment方法。如何使用下面所示的方法(从它们的documentation复制)的示例。
import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.*;
import android.app.Activity;
import android.os.Bundle;
public class MapPane extends Activity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_activity);
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
LatLng sydney = new LatLng(-33.867, 151.206);
map.setMyLocationEnabled(true);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));
map.addMarker(new MarkerOptions()
.title("Sydney")
.snippet("The most populous city in Australia.")
.position(sydney));
}
}引用谷歌的MapFragment/SupportMapFragment
只有在加载了底层映射系统并且片段中的底层视图存在时,才能使用getMap()获取getMap。这个类会自动初始化地图系统和视图;但是,当它准备就绪时,您无法得到保证,因为这取决于Google服务APK的可用性。如果GoogleMap不可用,getMap()将返回null。
在您的代码中,您在提交GoogleMap后立即检索MapFragment。等待MapFragment完全加载到活动中,这样您就可以得到GoogleMap。
也许,您可以使用接口将GoogleMap从MapFragment传递到Activity,如下所示。
public class MyMapFragment extends SupportMapFragment
{
private MapCallback callback;
public void setMapCallback(MapCallback callback)
{
this.callback = callback;
}
public static interface MapCallback
{
public void onMapReady(GoogleMap map);
}
@Override public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if(callback != null) callback.onMapReady(getMap());
}
}
public class MyActivity extends Activity implements MyMapFragment.MapCallback
{
// .........
@Override
public void onCreate(Bundle onsavedInstanceState)
{
mMapFragment = (MyMapFragment) getSupportFragmentManager()
.findFragmentByTag(MAP_FRAGMENT_TAG);
// We only create a fragment if it doesn't already exist.
if (mMapFragment == null) {
mMapFragment = MyMapFragment.newInstance();
mMapFragment.setMapCallback(this); // This activity will receive the Map object once the map fragment is fully loaded
// Then we add it using a FragmentTransaction.
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(MapLay.getId(), mMapFragment, MAP_FRAGMENT_TAG);
fragmentTransaction.commit();
}
else
{
mMapFragment.setMapCallback(this); // This activity will receive the Map object once the map fragment is fully loaded
}
@Override
public void onMapReady(GoogleMap map)
{
// Do what you want to map
}
}发布于 2013-10-01 05:50:20
进口部分
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;在oncreate内部
SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
mMap = mapFragment.getMap();和Xml部分
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />确保你已经投入了
<meta-data android:name="com.google.android.maps.v2.API_KEY"
android:value="api key"/> 在你的<application></application>标签里。
并在显能者档案中给予这些许可
<permission
android:name="packagename.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="packagename.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>发布于 2013-10-01 05:51:34
您的xml应该有SupportMapFragment。
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />https://stackoverflow.com/questions/19108843
复制相似问题