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显示了如何做到这一点与其他意见。