6

我有一個listView的活動,其中每個項目可以展開時點擊,顯示一個mapView。如果另一個項目被點擊,則打開的項目被關閉。 活動延伸MapActivity,並且只有一個MapView類的實例,這是我刪除和添加到需要這樣的項目:MapView中listView項目

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

也許你可以考慮總是將singleton mapView添加到你的mapContainer中,但是可以調用Visibility。例如非選中的行setVisibility(View.GONE),選中的行setVisibility(View.VISIBLE)。這是否會改變行爲? – CSmith 2012-07-12 18:01:23

+0

請參閱此鏈接http://stackoverflow.com/questions/2961275/android-mapview-contained-within-a-listview希望它可以幫助 – 2012-07-13 14:29:00

回答

1

也許你可以實現一個Holder類。一個比你的MapView擁有一個實例,因此它可以被恢復。

在最後一個例子HERE顯示瞭如何做到這一點與其他意見。