2

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は削除されていますが、削除するのに 2 回の呼び出しが必要だったのはなぜですか? 私は何を誤解していますか?

解決:

なんらかの理由で私はメンタルブロックを抱えていて、Listオーバーレイがリスト内に各タイプのレイアウトを1つ持つという私のビジネスロジックを強制するだろうと思いました。そうではないことがわかりました。 MapViews は、同じインスタンスの 2 つを含め、同じオーバーレイのインスタンスを好きなだけ持つことができます (メモリの問題を除く)。そのため、同じインスタンスの 2 つをオーバーレイに追加すると、List. 2回のremove通話が必要です。

4

0 に答える 0