Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在旋转屏幕或四处导航时保持Google Map API Android v2视图状态而不发出新请求?_Android_Google Maps_Android Fragments - Fatal编程技术网

如何在旋转屏幕或四处导航时保持Google Map API Android v2视图状态而不发出新请求?

如何在旋转屏幕或四处导航时保持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

我有一个装满碎片的抽屉。 当应用程序启动时,屏幕上会出现带有标记的谷歌地图视图。这是碎片的一部分

问题1 当单击另一个片段并返回地图片段时,它将发出一个新的请求来显示地图。使用replace.commit时会发生这种情况

当使用show and hide on fragments时,在旋转屏幕之前,这正是我所需要的。和 当导航抽屉上有2个以上的碎片时,所有的检查都会被添加,显示和隐藏什么等等,这会变得有点复杂。 有没有一种方法可以在不使用replace.commit;发出新请求的情况下保留Google地图视图

问题2 同样的情况,当旋转屏幕时,谷歌地图片段会发出一个新的请求。在不同的活动之间移动时也会发生同样的事情

因为谷歌地图的请求是有限的,所以这样浪费它们是没有意义的

我只需要在应用程序开始时发出一个请求,然后在应用程序周围导航时显示相同的状态

这是MapFragment文件

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有没有办法获得相同的结果,但采用推荐的方式?