将 Google 个地图添加到 RecyclerView

Adding Google Maps to a RecyclerView

我已经在 RecyclerView 中添加了地图视图以及其他类型的列表项,但是现在......我如何以及在哪里初始化地图,我在哪里监听 onMapReady 以便我可以放置一个标记之后,我该如何处理物品的回收?

知道在这种情况下最佳做法是什么吗?

例如,您可以使用 Glide 并加载地图预览,而不是地图片段 像这样:

    GlideApp
        .with(context)
        .load("http://maps.google.com/maps/api/staticmap?center=" + 
               lat + 
               "," + 
               lng + 
               "&zoom=15&size=200x200&sensor=false" +
               "&markers=color:red%7Clabel:C%" + 
               markerLat + 
               "," + 
               markerLlng)
        .centerCrop()
        .into(myImageView);

或使用库 - static-maps-api

有两种可能的方法来做这件事,
一个是 Google Static Maps API 使用,它会给你地图的快照。

另一个是,您可以在回收器项目中使用 com.google.android.gms.maps.MapView 并在您的 viewholder 中初始化,如下所示,

public class AdapterWithMap extends RecyclerView.Adapter<AdapterWithMap.CustomeHolder> {

        @Override
        public void onBindViewHolder(CustomeHolder holder, int position)
        {
            GoogleMap thisMap = holder.mapCurrent;
            if(thisMap != null)
                thisMap.moveCamera();//initialize your position with lat long  or move camera
        }
        @Override
        public void onViewRecycled(CustomeHolder holder)
        {
            // Cleanup MapView here?
            if (holder.mapCurrent != null)
            {
                holder.mapCurrent.clear();
                holder.mapCurrent.setMapType(GoogleMap.MAP_TYPE_NONE);
            }
        }
        public class CustomeHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback {
            GoogleMap mapCurrent;
            MapView map;

            public CustomeHolder(View view) {
                super(view);
                map = (MapView) view.findViewById(R.id.mapImageView);
                if (map != null)
                {
                    map.onCreate(null);
                    map.onResume();
                    map.getMapAsync(this);
                }

            }

            @Override
            public void onMapReady(GoogleMap googleMap) {
                MapsInitializer.initialize(getApplicationContext());
                mapCurrent = googleMap;
            }

        }
    }

google 地图中有一个叫做精简模式的东西,你可以在回收站视图中使用

检查这个litemode

和示例代码示例LiteListDemoActivity