无法在Fragment中保留SupportMapFragment

时间:2015-01-04 21:09:49

标签: android google-maps android-fragments

我有一个带有导航抽屉的应用程序,其中包含Google Maps片段和其他一些片段。我是以编程方式创建SupportMapFragment并将其放入地图容器中的自定义fragment_map布局中。

问题是我必须从数据库向地图添加 2000+标记,但每次设备旋转时都不想再次填充它们。我认为setRetainInstance(true)会解决问题,但无法正常工作 - 我会在没有标记的情况下获得一张全新的地图,相机在方向更改时位于0,0位置。示例应用程序正常工作,保留的istance,但他们都使用FragmentActivity,这不是我的情况。片段有什么问题?

GoogleMapsFragment.java:

public class GoogleMapsFragment extends Fragment implements OnMapReadyCallback {

private SupportMapFragment mapFragment;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_map, container, false);

    FragmentManager fm = getChildFragmentManager();
    mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        mapFragment.getMapAsync(this);
        mapFragment.setRetainInstance(true);
        fm.beginTransaction().add(R.id.map_cont, mapFragment).commit();
    }
    return rootView;
}

@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions().position(new LatLng(5, 5)));

    // a long code with map initialization and adding markers here
    // ...
}
}

1 个答案:

答案 0 :(得分:0)

默认情况下,当配置更改(例如方向)时,将重新启动整个活动,但是您可以通过指定活动何时可以自行处理来阻止它执行此操作,这意味着您可以告诉活动不重新启动,而是调用onConfigurationChanged

在这里阅读更多相关信息: how can I save the fragment? when I rotate the screen