我有一个带有导航抽屉的应用程序,其中包含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
// ...
}
}
答案 0 :(得分:0)
默认情况下,当配置更改(例如方向)时,将重新启动整个活动,但是您可以通过指定活动何时可以自行处理来阻止它执行此操作,这意味着您可以告诉活动不重新启动,而是调用onConfigurationChanged
在这里阅读更多相关信息: how can I save the fragment? when I rotate the screen