【发布时间】:2017-11-06 12:09:53
【问题描述】:
我在另一个片段中使用了谷歌地图,效果很好。因此,当我不得不在同一个应用程序中为另一个片段执行此操作时,我复制/粘贴代码并调整充气机和 findviewbyid。但是永远不会调用 onMapReady(),因此 googlemap 保持为空。
我见过MapView.onMapReady never called in Fragment for load Google Map in MapView 案例,它看起来与我的相似,但我想了解“实现 OnMapReadyCallback”机制。
调用onMapReady的机制是什么?我想当对 mapView.getMapAsync(this) 的调用发生时?
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class LocalisationMonitoringFragment extends Fragment implements OnMapReadyCallback {
private Context context;
private static View view;
private MapView mapView;
static private GoogleMap googleMap;
public LocalisationMonitoringFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.localization_monitor, null);
mapView = (MapView) view.findViewById(R.id.loc_mapView);
mapView.onCreate(savedInstanceState);
mapView.onResume();
mapView.getMapAsync(this);
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
return (view);
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
LatLng sydney = new LatLng(latitude, longitude);
googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description"));
CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
在我拥有的布局文件中:
<com.google.android.gms.maps.MapView
android:id="@+id/loc_mapView"
android:layout_below="@id/loc_name_txt"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp" />
【问题讨论】:
标签: android google-maps