6

私はlistViewでアクティビティを持っています。ここでは、各アイテムをクリックすると展開でき、mapViewが表示されます。別のアイテムがクリックされた場合、未処理アイテムは閉じられます。 活動はMapActivityを拡張し、私は削除して、このように必要に応じて項目に追加のMapViewのインスタンスは1つだけ、そこにある:MapViewのリストビューアイテム

private MapView getMapView() { 
    if (mMapView == null) { 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mMapView = (MapView) inflater.inflate(R.layout.club_map,null); 
    } 
    else 
    { 
     ((ViewGroup) mMapView.getParent()).removeView(mMapView); 
    } 
    return mMapView; 
} 

private void attachMap(View targetView,String siteID) { 
    if (openInPrgrs) { 
     return; 
    } 
    RelativeLayout relView = (RelativeLayout) targetView.findViewById(R.id.clubDetailsLayout); 
    LinearLayout mapContainer = (LinearLayout) relView.findViewById(R.id.mapContainer); 
    UtilFunctions.logIfDebug("MembershipsList","Attaching Map. siteID " + siteID + " childCount = " + mapContainer.getChildCount()); 
    if (mapContainer.getChildCount() > 0) { 
     return; 
    } 
    MapView mapView = getMapView(); 
    mapContainer.addView(mapView); 
} 

それはほとんどの時間を正常に動作しますが、画面がオフになると、または開いているアイテムを画面からスクロールして戻すと、mapViewが表示されなくなります。 これは、ビューがlistViewによってリサイクルされているためです。私が(ビューが開いた位置にある場合))(getViewメソッドにマップを付加しようとする場合は、次の項目が完全に展開されたときに

public View getView(int position, View convertView, 
       ViewGroup parent) { 

      final View resultView = super.getView(position, convertView, parent); 
      LayoutParams lp = resultView.getLayoutParams(); 
      if (curOpenPos == position) { 

       LinearLayout mapContainer = (LinearLayout) resultView.findViewById(R.id.mapContainer); 
       lp.height = item_height_open; 
       attachMap(resultView, siteID); 
      } 

} マップは消えますが、画面がオフとそれに行くとき表示されます。

これがなぜ起こるのか、誰かが私がそれを解決するために何ができるのかを知っていますか?

+0

おそらく、mapContainerにシングルトンのmapViewを追加することは考えられますが、Visibilityを利用することはおそらく考えられます。例えば選択されていない行setVisibility(View.GONE)、選択された行setVisibility(View.VISIBLE)。これは行動を変えますか? – CSmith

+0

このリンクを参照してくださいhttp://stackoverflow.com/questions/2961275/android-mapview-contained-within-a-listview役立つことを願っています –

答えて

1

おそらく、ホルダークラスを実装できます。 1つは、MapViewにインスタンスを保持して復元できるようにすることです。

最後の例では、HEREに、他のビューでそれを行う方法が示されています。

関連する問題