我一直试图让我的地图工作,我有FragmentTabHost atm只包含3个标签。在我的地图选项卡中,它应该加载谷歌地图片段并放大到用户位置,但它只是加载地图但不执行放大方法。我还修复了如果由于地图ID重复而存在Binrary XML文件时,当我返回到地图选项卡时它会崩溃应用程序。
另一个问题是我可以采用什么方法来异步加载maptab。
public class Maps extends Fragment {
private GoogleMap googleMap;
MapView mapView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_maps, container, false);
mapView = (MapView) view.findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
// Gets to GoogleMap from the MapView and does initialization stuff
googleMap = mapView.getMap();
MapsInitializer.initialize(this.getActivity());
return view;
}
public void onActivityCreate(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setUpMapIfNeeded();
}
@Override
public void onResume() {
mapView.onResume();
super.onResume();
}
@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (googleMap == null) {
// Try to obtain the map from the SupportMapFragment.
googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.mapview))
.getMap();
// Check if we were successful in obtaining the map.
if (googleMap != null) {
executeMap();
}
}
}
private void executeMap() {
googleMap.setMyLocationEnabled(true);
googleMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
//Get location services from Google services and choose the best fit through criteria
LocationManager locationMan = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
Criteria bestFit = new Criteria();
//Get name of best provider
String provider = locationMan.getBestProvider(bestFit, true);
//Get Location
Location myLocation = locationMan.getLastKnownLocation(provider);
//Get long and lat, create an object marker
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng position = new LatLng(latitude, longitude);
//Zoom into current location
googleMap.animateCamera(CameraUpdateFactory.newLatLng(position));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(18));
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("You are here"));
}
}
为什么不执行setupmaifneeded();
?
答案 0 :(得分:2)
对于first issue
:尝试使用以下方法zoom the camera to user's location
:
private void centerMapOnMyLocation() {
map.setMyLocationEnabled(true);
location = map.getMyLocation();
if (location != null) {
myLocation = new LatLng(location.getLatitude(),
location.getLongitude());
}
map.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation,
Constants.MAP_ZOOM));
}
对于second issue
:load the maptab asynchronously
是什么意思?您需要read data
形成database
吗?我的建议是,您可以在应用上添加splashScreen
等待片刻,让数据加载。
答案 1 :(得分:0)