gpt4 book ai didi

android - 自定义 RecyclerViewAdapter 中的 MapView

转载 作者:行者123 更新时间:2023-12-05 00:08:46 24 4
gpt4 key购买 nike

我正在尝试实现一个包含 CardView 的 RecyclerView,每个 MapView 都在里面。问题是,在自定义适配器中初始化的 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 作为 public static。这似乎不起作用, map 仍然是空白。

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 .

我的目标是,无论 fragment 当前处于哪个生命周期,都加载 map 。我假设您不需要 Adapter、Fragment 或 XML 来解决这个问题。如果你这样做了,请告诉我。

最佳答案

不要在回收器 View 中使用 map View ,因为它是重组件,会消耗更多内存,而是使用精简模式的 map ,这是专门为使用回收器 View / ListView 列出而设计的,有关更多详细信息,请参阅此链接 https://developers.google.com/maps/documentation/android-sdk/lite

Google 还提供了有关如何在回收站 View 中使用精简模式 map 的演示,这里是 GitHub 的链接 https://github.com/googlemaps/android-samples/blob/master/ApiDemos/java/app/src/main/java/com/example/mapdemo/LiteListDemoActivity.java

关于android - 自定义 RecyclerViewAdapter 中的 MapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com