我的应用程序在选项卡显示中有5个片段,其中一个是GoogleMaps片段,它确实可用于显示地图,用户所在位置的位置提示以及该位置的相机更新。但是,在片段之间切换时,我的位置信息丢失。
这是我的代码,所以我可以更好地解释我要做什么:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map, null, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.mapView);
if (mapFragment == null) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
mapFragment = SupportMapFragment.newInstance();
fragmentTransaction.replace(R.id.mapView, mapFragment).commit();
}
mapFragment.getMapAsync(this);
return view;
}
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (ActivityCompat.checkSelfPermission(getActivity(),
Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED) {
getDeviceLocation();
mMap.setMyLocationEnabled(true);
}
}
我尝试实现getDeviceLocation()
方法mMap.setMyLocationEnabled(true)
之前的if
,onCreateView()
和周围的return view;
实例在onMapReady函数内部行,但是在Logcat中收到空对象引用错误(在mMap
对象上),随后发生崩溃。当将那些代码位移动到其他地方setMyLocationEnabled(true)
和getDeviceLocation()
时,只会仅发生该错误。
我认为这是因为在检索视图之前,mMap仍然为null。基本上,如何在不遇到空错误引用的情况下保持位置blip的状态而不会调用setMyLocationEnabled(true)
方法?因为似乎无法在return view
之前的任何地方实现获取位置的代码,而不会出现空错误。
很抱歉格式错误,问题冗长。我只是不知道如何将Google Maps API代码与自己的计划集成在一起,因此,我非常感谢你们提供的任何输入。