我已经在
RecyclerView
中添加了地图视图以及其他类型的列表项,但现在...如何以及在哪里初始化地图,在哪里监听 onMapReady 以便之后可以放置标记,以及如何我负责物品的回收?
您知道在这种情况下最佳实践是什么吗?
有两种可能的方法来做到这一点,
一种是使用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;
}
}
}
例如,您可以使用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