在最开始学习使用百度地图,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);
最后完美解决