关于百度地图marker的点击事件

在最开始学习使用百度地图,marker的点击事件,很容易实现点击弹出框;

像这样:

baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {

        baiduMap.showInfoWindow(infoWindow);
        return false;
    }
});
这样的确是实现了点击事件,并弹出气泡框,没什么问题;可是问题出现在,当我的数据源会刷新的时候,就会出现问题了,当我刷新4次数据源之后,发现点击marker会出现明显的卡顿现象,最开始怀疑是弹出框的问题,后面排除了,怀疑是marker没有清除,所以就加上多个:
baiduMap.clear();

然而还是卡顿,百度一下说是set多次listener,所以就开始验证:

baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        Log.e("MARKER","点击事件开始");
        LocationBean useBean = (LocationBean) marker.getExtraInfo().getSerializable(AppCons.TEST_USE);   //读取存到marker里面的数据
        position = marker.getExtraInfo().getInt("position");
        getAdd(position, useBean);
        Log.e("MARKER","点击事件结束");

果然。log打印:

05-27 11:52:18.163 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.173 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.173 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.173 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.173 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.183 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.183 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.183 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.183 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.193 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.193 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.193 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.193 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.203 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.203 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.203 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.203 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.203 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束
05-27 11:52:18.203 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件开始
05-27 11:52:18.213 15287-15287/com.example.maptest.mycartest E/MARKER: 点击事件结束

所以的确是set之后没有移除;就自己在写一个listener实现点击事件:

private final class OnMarkerClickListeners implements BaiduMap.OnMarkerClickListener 

在每次刷新的时候移除listener:

baiduMap.removeMarkerClickListener(onMarkerClickListener);

最后完美解决









你可能感兴趣的:(关于百度地图marker的点击事件)