在谷歌地图中使用infowindowclicklistener作为从JSON android检索到的数据的制造商pin



我正在做一个项目,其中有一个谷歌地图,其中的标记引脚由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));

最新更新