List.remove() 什么时候不删除?...在一个MapView
?
我有一个带有 aMapView
和一个覆盖的应用程序,它扩展了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
删除了,但为什么需要两次调用才能删除?我有什么误解?
解决方案:
无论出于何种原因,我都有一个心理障碍,并假设List
叠加层会强制执行我的业务逻辑,即在列表中拥有每种类型的一个布局。事实证明不是。 MapView
s 可以拥有任意多个相同覆盖的实例,包括两个相同的实例(排除内存问题),因此如果将两个相同的实例添加到覆盖中,则List
. 需要两个remove
电话。