List.remove()何时不删除? ......在MapView
?
我的应用程序包含MapView
和覆盖范围Overlay
。在我的应用程序的特定情况下(用户搜索添加我的叠加层的内容,然后取消搜索,此时我调用下面的代码应删除叠加层。)
代码:
Log.e(TAG, "Map View Contains Overlay? " + mMapView.getOverlays().contains(mOverlay));
mMapView.getOverlays().remove(mOverlay);
Log.e(TAG, "Map View Contains Overlay? " + mMapView.getOverlays().contains(mOverlay));
mMapView.getOverlays().remove(mOverlay);
Log.e(TAG, "Map View Contains Overlay? " + mMapView.getOverlays().contains(mOverlay));
日志:
03-07 14:05:43.737: E/SearchActivity(22445): Map View Contains Overlay? true
03-07 14:05:43.737: E/SearchActivity(22445): Map View Contains Overlay? true
03-07 14:05:43.737: E/SearchActivity(22445): Map View Contains Overlay? false
备注:
mMapView
是com.google.android.maps.MapView
mOverlay
是我写的自定义类的一个实例(不触及.equals()
或.hashCode()
并扩展com.google.android.maps.Overlay
此时mOverlay
已删除,但为什么需要两次调用才能删除?我误解了什么?
SOLUTION:
无论出于何种原因,我有一个心理障碍,并假设覆盖的List
将强制我的业务逻辑在列表中有每种类型的一个布局。事实证明它没有。 MapView
可以包含任意多个相同叠加层的实例,包括两个相同的实例(禁止内存问题),因此如果将两个相同的实例添加到叠加层,则有两个相同的实例List
中的实例。需要两次remove
来电。