无法在我的标记上隐藏InfoWindow

时间:2014-09-02 15:17:08

标签: android google-maps infowindow

在我的应用程序中,我有一些带有自定义InfoWindow的标记,

enter image description here

蓝色标记不同,当我点击它时,我不希望信息窗口弹出。

所以我尝试使用marker.hideInfoWindow();来隐藏我的蓝色标记上的infowindow,但它似乎不起作用,因为我得到了我的屏幕上的同一个InfoWindow最后再次弹出蓝色标记标记

enter image description here

map.setInfoWindowAdapter(new InfoWindowAdapter() {
                View infoLayout=getLayoutInflater().inflate(R.layout.custominfowindow, null);
                @Override
                public View getInfoWindow(Marker arg0) {
                    return null;
                }

                @Override
                public View getInfoContents(Marker marker) {

                    if(marker.getTitle().equals("destAddr") || marker.getTitle().equals("myPos"))
                        {
                        // blue marker code executed here
                        marker.hideInfoWindow();
                        }
                    else
                    {
                    SearchUser su = new SearchUser();
                    Bitmap bm = null;
                    User user = su.getUserByName(marker.getTitle(), Users);
                    if(user!=null)
                    bm = BitmapFactory.decodeFile(user.getImagePath());

                    ImageView infoImg = (ImageView) infoLayout.findViewById(R.id.infoImg);
                    TextView infoName = (TextView) infoLayout.findViewById(R.id.infoName);
                    RatingBar infoRat = (RatingBar) infoLayout.findViewById(R.id.infoRat);

                    infoName.setText( user.getName() );
                    infoRat.setRating((float)user.getRating());                 
                    infoImg.setImageBitmap(bm);
                    }
                    return infoLayout;
                }
            });
}                

1 个答案:

答案 0 :(得分:0)

覆盖onMarkerClick,如果您不希望信息窗口显示返回true。

简单的方法是检查onMarkerCLick

中标记中的标题或片段
private void setUpMap() {

    mMap.setOnMapClickListener(this);

...

@Override
public boolean onMarkerClick(Marker marker) {
    return (marker.getTitle()=="Blue")?true:false;
}

可以确定实际蓝色/读取图标的更复杂方法将在onMarkerClick()方法中使用Marker.getId()。向地图添加标记时,将markerId保存在列表或其他内容中。下面我在asynctask publishProgress中添加一个标记到地图并保存markerId。您无法扩展final class markerOptions以添加markerId字段,因此只需创建一个bean。

public class KmlMarkerOptions {

public MarkerOptions markeroptions = new MarkerOptions();
public String id = "";

public KmlMarkerOptions(){

}
}

将标记添加到地图时,将ID保存在MarkerOptions的bean集合中。下面的示例使用asynctask的发布进度,但您可以在代码中的任何位置执行此操作。

protected void onProgressUpdate(KmlMarkerOptions... params) {
    Marker marker = mMap.addMarker(params[0].markeroptions);
    params[0].id = marker.getId();
}

现在,当点击标记时,从标记中的id找到原始的markerOptions,并确定点击的标记类型。

@Override
public boolean onMarkerClick(Marker marker) {
    return showMarker(marker);
}


private boolean showMarker(Marker marker) {
    KmlMarkerOptions kmlmo = findKmlMarkerOptions(marker);
    if (kmlmo != null) {
        // here you could check the type of icon blue/red
        // return (kmlmo.markerOptions.icon== blah)?true:false;
        // what I'm doing is showing a dialog fragment with all
        // kinds of goodies like buttons and active web content 
        // right over the map like a custominfowindow should be.
        // and also moving the map centered on the marker.
            FragmentManager fm = getSupportFragmentManager();
            KmlMarkerDialogFragment markerWebView = KmlMarkerDialogFragment
                    .newInstance(kmlmo);
            markerWebView.show(fm, "fragment_marker");
            mMap.moveCamera(CameraUpdateFactory
                    .newLatLng(kmlmo.markeroptions.getPosition()));
            return true;
    }
    return false;
}

public KmlMarkerOptions findKmlMarkerOptions(Marker marker) {
    if (_kmlmo != null) {
        String id = marker.getId();
        for (KmlMarkerOptions mo : _kmlmo) {
            if (id.equals(mo.id)) {
                return mo;
            }
        }
    }
    return null;
}

//在竞争对手之前点击一下,因为使用此代码,您可以显示带有活动按钮的真正自定义信息窗口,您可以让评级明星实际处理和访问网络内容,无论您想做什么