自定义 RecyclerViewAdapter 中的 MapView
MapView inside custom RecyclerViewAdapter
我正在尝试实现一个包含 CardView 的 RecyclerView,每个 MapView 都在里面。
问题是,在自定义适配器中初始化的 MapView 不会加载,除非 您单击 它。
正如这里已经提到的:
您可以通过覆盖 onResume() 来解决问题。
我试过以下方法:
@Override
public void onResume() {
if(LocationsAdapter.ViewHolder.mapView != null) {
LocationsAdapter.ViewHolder.mapView.onResume();
}
super.onResume();
}
老实说,我根本不知道如何以任何其他方式覆盖 onResume,如果我在这里违反了某些编程规则,请原谅我。
我在 LocationsAdapter 中创建的 ViewHolder 中将 mapView 作为 public 静态。这似乎不起作用,地图仍然是空白。
Adapter内部的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。
我的目标是,无论片段当前处于哪个生命周期,都加载地图。
我假设您不需要 Adapter、Fragment 或 XML 来解决这个问题。如果你这样做了,请告诉我。
不要在回收器视图中使用地图视图,因为它是重组件,会消耗更多内存,而是使用专门为使用回收器视图/列表视图列出而设计的精简模式地图,有关更多详细信息,请参阅此linkhttps://developers.google.com/maps/documentation/android-sdk/lite
另外 google 提供了关于如何在回收站视图中使用精简模式地图的演示,这里是 link 到 GitHub https://github.com/googlemaps/android-samples/blob/master/ApiDemos/java/app/src/main/java/com/example/mapdemo/LiteListDemoActivity.java
一定要在holder中调用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);
}
我正在尝试实现一个包含 CardView 的 RecyclerView,每个 MapView 都在里面。
问题是,在自定义适配器中初始化的 MapView 不会加载,除非 您单击 它。
正如这里已经提到的:
@Override
public void onResume() {
if(LocationsAdapter.ViewHolder.mapView != null) {
LocationsAdapter.ViewHolder.mapView.onResume();
}
super.onResume();
}
老实说,我根本不知道如何以任何其他方式覆盖 onResume,如果我在这里违反了某些编程规则,请原谅我。 我在 LocationsAdapter 中创建的 ViewHolder 中将 mapView 作为 public 静态。这似乎不起作用,地图仍然是空白。
Adapter内部的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。
我的目标是,无论片段当前处于哪个生命周期,都加载地图。 我假设您不需要 Adapter、Fragment 或 XML 来解决这个问题。如果你这样做了,请告诉我。
不要在回收器视图中使用地图视图,因为它是重组件,会消耗更多内存,而是使用专门为使用回收器视图/列表视图列出而设计的精简模式地图,有关更多详细信息,请参阅此linkhttps://developers.google.com/maps/documentation/android-sdk/lite
另外 google 提供了关于如何在回收站视图中使用精简模式地图的演示,这里是 link 到 GitHub https://github.com/googlemaps/android-samples/blob/master/ApiDemos/java/app/src/main/java/com/example/mapdemo/LiteListDemoActivity.java
一定要在holder中调用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);
}