我正在试图找出处理Marker对象与包含数据的自定义对象分离的最佳方法,并且可以在销毁Activity时将其存储在片段中。
我想:
在地图上显示多个移动实体的位置。
调用onDestroy()时存储每个实体的数据。
在侧栏上显示有关所选实体的其他信息
对于每个位置,我创建一个存储在HashMap上的标记:
private HashMap<String, Marker> markers;
private Marker createNewMarker(String sourceName) {
Marker marker;
marker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(0, 0)));
marker.setIcon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_sys));
markers.put(sourceName, marker);
return marker;
}
当我通过网络收到有关实体的信息时,我会更新标记:
private Fragment dataFrag;
private final Handler uiHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// Message has both an unique id and a name that will change
// Update the data in the Fragment
// Update marker fields
}
单击标记时,有关它的信息将显示在侧栏中
mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// Identify what entity the markers refers to
// Marker only has the name (which changes) in the title
// HELP HERE!!!
// Update labels
return true;
});
});
我不知道O(1)只根据名称(没有id)找到实体的方法。
我可以在标记中存储其他值吗?
我应该扩展Marker类并添加另一个字段吗?
什么是最好的方法?
我不得不将Marker与实体数据分开,以便我可以将数据存储在Fragment中而不存储标记。
所有帮助非常感谢
答案 0 :(得分:1)
每个标记在创建时都会分配一个新的唯一ID。 不要将“隐藏”数据直接添加到标记中,只需保留一张地图,该地图将标记的ID映射到附加数据。
在你的情况下,这可能是一个类似于你的标记 - 地图的地图,但是以相反的方式组织:
markerToSourceMap.put(marker.getId(), sourceName);
在onMarkerClick中,您可以通过
检索sourceNamesourceName = markerToSourceMap.get(marker.getId());