将 Google 地图添加到 RecyclerView

问题描述 投票:0回答:3

我已经在

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

您知道在这种情况下最佳实践是什么吗?

android android-mapview android-maps-v2
3个回答
19
投票

有两种可能的方法来做到这一点,
一种是使用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;
            }

        }
    }

1
投票

例如,您可以使用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);

或使用 lib - static-maps-api


1
投票

谷歌地图中有一种称为精简模式的东西,您可以在回收器视图中使用

检查这个精简模式

和示例代码示例LiteListDemoActivity

© www.soinside.com 2019 - 2024. All rights reserved.