为什么需要两个MapView.getOverlays()。remove()调用才能删除Overlay?

时间:2013-03-07 20:20:24

标签: android overlay android-mapview

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

备注:

  • mMapViewcom.google.android.maps.MapView
  • 的一个实例
  • mOverlay是我写的自定义类的一个实例(不触及.equals().hashCode()并扩展com.google.android.maps.Overlay

此时mOverlay已删除,但为什么需要两次调用才能删除?我误解了什么?

SOLUTION:

无论出于何种原因,我有一个心理障碍,并假设覆盖的List将强制我的业务逻辑在列表中有每种类型的一个布局。事实证明它没有。 MapView可以包含任意多个相同叠加层的实例,包括两个相同的实例(禁止内存问题),因此如果将两个相同的实例添加到叠加层,则有两个相同的实例List中的实例。需要两次remove来电。

0 个答案:

没有答案