如何在Fragment中重用/回收GoogleMaps?

时间:2017-04-05 13:22:20

标签: android google-maps android-fragments google-maps-android-api-2 supportmapfragment

很长一段时间我都在使用这段代码,以便重复使用这些代码。片段中的GoogleMap - 当切换到另一个片段并再次打开MapFragment时,地图及其所有内容都像以前一样(不再放大,不需要重新设置标记,它只是在背景中#' 39;并再次提到前面):

public class MapFragmentGoogle extends Fragment implements SensorEventListener, OnMapLoadedCallback  {
private static View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (rootView != null) {
        ViewGroup parent = (ViewGroup) rootView.getParent();
        if (parent != null)
            parent.removeView(rootView);
    }
    try {
        rootView = inflater.inflate(R.layout.fragment_map_google, container, false);
    } catch (InflateException e) {
        //
    }
return rootView;

所以现在我从eclipse切换到AndroidStudio(我知道我迟到了),这是实现最新的PlayServices而我无法使用

map = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.gmap)).getMap();

以及' Reuse-Code"不再起作用了。我正在为这些事情分层。

我如何拥有一个完全保持原样的GoogleMap,没有新的init,没有从空间到位的zomming,在切换到另一个片段然后返回mapfragment时不重绘Polylines和Markersetc等?

1 个答案:

答案 0 :(得分:0)

您仍然可以使用supportmapfragment,请找到以下代码:

XML:

<fragment
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
    android:id="@+id/search1"

    >

代码:

    SupportMapFragment mapFragment;
  mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.maps);
        mapFragment.getMapAsync(this);


        ldb = new LocationDatabase(this);
        intentlat = null;
        intentlng = null;
        public void onMapReady(GoogleMap googleMap) {
        m_map = googleMap;
        map_false = true;
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        m_map.setMyLocationEnabled(true);
        m_map.getUiSettings().setMapToolbarEnabled(true);
        m_map.getUiSettings().setZoomControlsEnabled(true);
        m_map.getUiSettings().setZoomGesturesEnabled(true);
        m_map.getUiSettings().setMyLocationButtonEnabled(true);

        geocoder = new Geocoder(this, Locale.getDefault());
        addresses = null;

        if (intentlat == null && intentlng == null) {
            LatLng target3 = new LatLng(<latitude>, <81.488100>);
            CameraPosition nnn = CameraPosition.builder().target(target3).zoom(14).build();
            m_map.animateCamera(CameraUpdateFactory.newCameraPosition(nnn), 2000, null);
CameraPosition nnn = CameraPosition.builder().target(target3).zoom(14.0f).build();
            m_map.animateCamera(CameraUpdateFactory.newCameraPosition(nnn), 2000, null);

}
相关问题