【问题标题】:How to reuse/recycle GoogleMaps in Fragment?如何在 Fragment 中重复使用/回收 GoogleMaps?
【发布时间】:2017-08-31 03:30:39
【问题描述】:

很长时间以来,我使用此代码在 Fragment 中“重用”GoogleMap - 当切换到另一个 Fragment 并再次打开 MapFragment 时,地图及其所有内容与以前一样(不再放大,无需重新设置标记,它“只是在后台”并再次被带到前面):

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();

“重用代码”不再起作用了。我对这些事情感到厌烦了。

我怎样才能有一个谷歌地图,它保持原样,没有新的初始化,没有从空间到地方的缩放,在切换到另一个片段然后回到地图片段时不重绘折线和标记等?

【问题讨论】:

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


    【解决方案1】:

    您仍然可以使用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);
    
    }
    

    【讨论】:

    • 这不是关于使用 supportmapfragment,而是关于“保持片段原样” - 在重新打开片段时不重新加载地图。
    • 我认为地图加载一次并在内存中保留很长时间,根据我的理解,您希望查看您在该屏幕不活动时离开的地图片段上的位置。如果是这种情况,请不要为相机设置动画并直接转到您保存的实例状态以获取 latlong
    猜你喜欢
    • 2021-07-19
    • 2016-02-25
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多