我正在做一个项目,其中有一个谷歌地图,其中的标记引脚由JSON接收的数据填充。我将标记引脚设置如下:
public void loadpinsonmap()
{
for(int i=0;i<job_list.size();i++)
{
Job_data j=job_list.get(i);
googleMap.addMarker(new MarkerOptions().title(j.job_shop_name+"@@@"+j.job_total_price)
.position(new LatLng(Double.parseDouble(j.job_shop_latitude),Double.parseDouble(j.job_shop_longitude))));
}
}
自定义信息窗口设置如下:
googleMap.setInfoWindowAdapter(new InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker pin) {
View v = getActivity().getLayoutInflater().inflate(R.layout.info_window_layout, null);
TextView tvshop = (TextView) v.findViewById(R.id.tv_shop_name);
TextView tvprice = (TextView) v.findViewById(R.id.tv_job_price);
String[] contents = pin.getTitle().split("@@@");
String shop_name = contents[0];
String job_price = contents[1];
tvshop.setText(shop_name);
tvprice.setText("Rs "+job_price);
return v;
}
@Override
public View getInfoContents(Marker arg0) {
return null;
}
});
现在我的问题是:
我想点击信息窗口,并获得相应的对象为特定的标记针。一种方法是遍历列表,并与特定引脚的纬度进行比较。但是,如果列表很大,那么在迭代中就会浪费时间。那么,除了遍历列表之外,还有什么方法可以获得corrseponding对象吗?
尝试OnMarkerClickListener
/**
* This method is get called when user tap on a marker
*/
private OnMarkerClickListener mMarkerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(context, "clicked: " + markersAndObjects.get(marker.getId()), Toast.LENGTH_SHORT).show();
return false;
}
};
// Don't forget to set the listener
googleMap.setOnMarkerClickListener(mMarkerClickListener);
// markersAndObjects below is a hashmap where
Marker marker = googleMap.addMarker(markerOptions);
markersAndObjects.put(marker.getId(), (YOUR DATA));