OnMapLoadedCallback和OnMapReadyCallback,何时使用哪个?

Ely*_*lye 7 android google-maps android-viewholder android-recyclerview

在使用GoogleMap Lite的ViewHolder时,作为RecyclerView中行的一部分,我正在寻找回调来在Map准备就绪时设置引脚位置.我发现下面的两个功能.

  1. OnMapLoadedCallback:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback?hl = en

  2. OnMapReadyCallback:https://developers.google.com/android/reference/com/google/android/gms/maps/OnMapReadyCallback

两者都证明有效和可用(如下所示).因此,我很困惑,如果他们确实有任何特定的不同行为,应该在不同的场合使用,或者他们确实相似,可以互换使用?

使用OnMapLoadedCallback:

    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (Marker marker : markers) {
        builder.include(marker.getPosition());
    }

    final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 0);
    googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
        @Override
        public void onMapLoaded() {
            googleMap.moveCamera(cameraUpdate);
        }
    });
Run Code Online (Sandbox Code Playgroud)

使用OnMapReadyCallback:

    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (Marker marker : markers) {
        builder.include(marker.getPosition());
    }

    final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(builder.build(), 0);
    mapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            googleMap.moveCamera(cameraUpdate);
        }
    });
Run Code Online (Sandbox Code Playgroud)

谢谢!!

asc*_*sco 6

您可以安全地使用OnMapReadyCallback设置引脚.只要地图准备就绪,您就可以使用它.

OnMapLoadedCallback正如文档所述,被称为

当地图完成渲染时.在获取渲染地图所需的所有图块并且所有标记完成之后,会发生这种情况.

例如.地图的内容已完全加载且可见.

这比OnMapReady晚发生.我没有理由等待那件事.

编辑:调用 googleMap.setOnMapLoadedCallback甚至意味着OnMapReady已经碰巧能够安全地调用(googleMap != null).