我正在尝试实现一个RecyclerView,其中包含CardViews,其中每个MapView都在其中。 问题是,除非自定义Adapter 单击,否则不会加载在自定义适配器中初始化的MapView。 如此处已提及:Android MapView does not load unless you touch on the mapview 您可以通过覆盖onResume()解决问题。 我已经尝试过以下方法:
@Override
public void onResume() {
if(LocationsAdapter.ViewHolder.mapView != null) {
LocationsAdapter.ViewHolder.mapView.onResume();
}
super.onResume();
}
老实说,我根本不知道如何以任何其他方式重写onResume,如果我在这里违反了某些编程规则,请原谅我。 我在LocationsAdapter中创建的ViewHolder中将mapView设置为公共静态。这似乎不起作用,地图仍然空白。
适配器内的ViewHolder实现OnMapReadyCallback。
public static class ViewHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback
...
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
Location location = locations.get(getAdapterPosition());
this.googleMap.addMarker(new MarkerOptions().position(location.getLatlng()).title(location.getName()));
this.googleMap.moveCamera(CameraUpdateFactory.newLatLng(location.getLatlng()));
this.googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(location.getLatlng(), 7.0f));
}
调用ViewHolder时将调用这两个方法。
mapView.onCreate(null);
mapView.getMapAsync(this);
有关此问题的另一篇文章尚未解答:mapView inside cardview not load the map。
我的目标是,无论片段当前处于哪个生命周期内,都加载地图。 我假设您将不需要适配器,片段或XML来解决此问题。如果您这样做,请告诉我。
答案 0 :(得分:8)
请勿在回收器视图中使用地图视图,因为它是笨重的组件,会占用更多内存,而是使用专为与回收器视图/列表视图一起列出而设计的精简地图模式,有关更多详细信息,请参见此链接{{3 }}
Google还提供了有关如何在回收者视图中使用精简模式地图的演示,这是指向GitHub https://developers.google.com/maps/documentation/android-sdk/lite
的链接答案 1 :(得分:0)
请确保在所有者中调用onResume
if (mapView != null) {
// Initialise the MapView
mapView.onCreate(null);
mapView.onResume(); //Probably U r missing this
// Set the map ready callback to receive the GoogleMap object
mapView.getMapAsync(this);
}