如何在旋转屏幕或四处导航时保持Google Map API Android v2视图状态而不发出新请求?
我有一个装满碎片的抽屉。 当应用程序启动时,屏幕上会出现带有标记的谷歌地图视图。这是碎片的一部分 问题1 当单击另一个片段并返回地图片段时,它将发出一个新的请求来显示地图。使用replace.commit时会发生这种情况 当使用show and hide on fragments时,在旋转屏幕之前,这正是我所需要的。和 当导航抽屉上有2个以上的碎片时,所有的检查都会被添加,显示和隐藏什么等等,这会变得有点复杂。 有没有一种方法可以在不使用replace.commit;发出新请求的情况下保留Google地图视图 问题2 同样的情况,当旋转屏幕时,谷歌地图片段会发出一个新的请求。在不同的活动之间移动时也会发生同样的事情 因为谷歌地图的请求是有限的,所以这样浪费它们是没有意义的 我只需要在应用程序开始时发出一个请求,然后在应用程序周围导航时显示相同的状态 这是MapFragment文件如何在旋转屏幕或四处导航时保持Google Map API Android v2视图状态而不发出新请求?,android,google-maps,android-fragments,Android,Google Maps,Android Fragments,我有一个装满碎片的抽屉。 当应用程序启动时,屏幕上会出现带有标记的谷歌地图视图。这是碎片的一部分 问题1 当单击另一个片段并返回地图片段时,它将发出一个新的请求来显示地图。使用replace.commit时会发生这种情况 当使用show and hide on fragments时,在旋转屏幕之前,这正是我所需要的。和 当导航抽屉上有2个以上的碎片时,所有的检查都会被添加,显示和隐藏什么等等,这会变得有点复杂。 有没有一种方法可以在不使用replace.commit;发出新请求的情况下保留Goo
public class MapFragment extends android.support.v4.app.Fragment implements OnMapReadyCallback {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_map, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
map.setMyLocationEnabled(true);
LatLng location= new LatLng(58.6536852, 25.481182);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 7));
map.addMarker(new MarkerOptions().position(new LatLng(59.408109, 24.326428)).title("marker 1"));
map.addMarker(new MarkerOptions().position(new LatLng(59.481070, 25.654483)).title("marker 2"));
}
}这个问题的简单解决方案是在创建映射片段后调用setRetainInstancetrue 此方法执行以下功能: 更改方向后保留标记。 避免在屏幕旋转后创建地图片段的新实例。 避免在每次创建映射后提出额外请求。 下面是代码段的概述:
public class RetainMapFragment extends MapFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
}
感谢您的重播,我不能在子片段中使用此方法。我的地图片段位于:导航抽屉片段->其中一个滑动选项卡。我试图将其设置为navigation drawer fragment,但没有按预期工作…此帖子有一个类似的问题,它导致了此帖子:在这里我找到了一个可行的解决方案,但不建议通过在您的AndroidManifest.xml中添加orientation:configChanges来实现。像这样的android:configChanges=keyboard | keyboardHidden | orientation | screenLayout | uiMode | screenSize | Smallest screenSize有没有办法获得相同的结果,但采用推荐的方式?