今天实在是被坑到了。。。留个记录。。
我是用在poi搜索后要把数据添加到地图上。只贴部分代码。
@Override
public void onPoiSearched(PoiResult result, int errorCode) {
if (errorCode == 1000) {//成功
Log.d(TAG, "onPoiSearched: ");
if (result != null && result.getQuery() != null) {
ArrayList<PoiItem> pois = result.getPois();// 取得第一页的poiitem数据,页数从数字0开始,前面设置每页15条数据
if (pois != null && pois.size() > 0) {
ArrayList<MarkerOptions> markerOptionsList = new ArrayList<>();
LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();
for (int i = 0; i < pois.size(); i++) {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(new LatLng(pois.get(i).getLatLonPoint().getLatitude(), pois.get(i).getLatLonPoint().getLongitude()));//经纬度
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_map_mark_unselect));
markerOptions.title(pois.get(i).getTitle());
markerOptions.snippet(pois.get(i).getSnippet());
markerOptionsList.add(markerOptions);
boundsBuilder.include(new LatLng(pois.get(i).getLatLonPoint().getLatitude(), pois.get(i)
.getLatLonPoint().getLongitude()));
}
LatLngBounds bounds = boundsBuilder.build();
mMap.clear(true);//清理之前地图上所有图标
ArrayList<Marker> markers = mMap.addMarkers(markerOptionsList, true);
mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10));
} else {
ToastUtils.showToast(mContext, R.string.no_result);
}
} else {
ToastUtils.showToast(mContext, R.string.no_result);
}
} else {
ToastUtils.gaodeShowError(mContext, errorCode);
}
}
问题就出在那句mMap.clear(true);//清理之前地图上所有图标
每次从搜索页返回,然后先是屏幕移动到marker的坐标位置,然后又自己返回当前坐标的marker位置。。。找了各种生命周期,检查各个部分代码才发现是这个东西坑了。。。
看下高德地图的官方api
他写的应该还是蛮清楚的
两种:
一:默认是clear(false)就是上面那个,把所有东西都删了(包括当前坐标的那个marker)
二:除了当前坐标的那个marker其他全删了。
我一开始一直用clear()(上面那个),结果会产生自动返回当前坐标位置的现象(就是当前坐标移动到屏幕中心点),我猜是把当前坐标的marker清除了并同时又开着定时定位,然后会自动激活某些东西(但是api上没说。。。)
最后我用clear(true),就不会出现问题了。