2

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叠加层会强制执行我的业务逻辑,即在列表中拥有每种类型的一个布局。事实证明不是。 MapViews 可以拥有任意多个相同覆盖的实例,包括两个相同的实例(排除内存问题),因此如果将两个相同的实例添加到覆盖中,则List. 需要两个remove电话。

4

0 回答 0