1. 程式人生 > >Android百度地圖onMarkerClick方法執行多次

Android百度地圖onMarkerClick方法執行多次

最近在使用百度地圖時,要實現返回當前位置附近的Marker,然後給Marker新增點選事件,點選Marker彈出PopupWindow,每次重新整理地圖顯示新的Marker,使用bdMap.clear()重新整理失敗,原來的Marker還留在地圖上,點選Marker,會多次執行onMarkerClick方法,後來仔細閱讀百度地圖API,發現有個方法我沒做,就是removeMarkerClickListener

原來新增Marker點選事件是這樣寫的:

bdMap.setOnMarkerClickListener(new bdMap.OnMarkerClickListener() {
    @Override
public boolean onMarkerClick(Marker marker) { //在這裡我做了彈出PopupWindow return false; } });

使用的是匿名內部類的方法實現點選事件,出現多次執行點選事件,建立多次PopupWindow。

修改方法:
自己寫一個listener實現點選事件:

    BaiduMap.OnMarkerClickListener onMarkerClickListener = new BaiduMap.OnMarkerClickListener() {
        @Override
        public
boolean onMarkerClick(Marker marker) { ////// return false; } };

然後再刪除舊Marker,新增新Marker時,新增如下方法:

    bdMap.removeMarkerClickListener(onMarkerClickListener);
    bdMap.clear();

完美解決

設定地圖 Marker 覆蓋物點選事件監聽者,自3.4.0版本起可設定多個監聽物件,停止監聽時呼叫removeMarkerClickListener移除監聽物件

removeMarkerClickListener:

public final void removeMarkerClickListener(BaiduMap.OnMarkerClickListener listener)
移除一個地圖 Marker 覆蓋物點選事件監聽者
引數:
listener -OnMarkerClickListener