6

Ich habe eine Aktivität mit einer ListView, wo jedes Element erweitert werden kann, wenn auf geklickt wird, zeigt eine MapView. Wenn auf einen anderen Artikel geklickt wird, wird der offene Artikel geschlossen. Die Aktivität erstreckt MapActivity, und es gibt nur eine Instanz von mapview, die ich auf die Elemente entfernen und hinzufügen, wie dies erforderlich:MapView in einer ListeView item

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); 
} 

Es arbeitet die meiste Zeit in Ordnung, aber wenn der Bildschirm schaltet sich aus, und zurück, oder der geöffnete Gegenstand wird vom Bildschirm und zurück gescrollt, verschwindet die mapView. Ich weiß, das ist, weil die Ansicht von der ListView wiederverwendet wird. Wenn ich versuche, die Karte in getView() zu befestigen (wenn die Ansicht in der offenen Position ist):

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); 
      } 

} die Karte verschwindet, wenn das Element vollständig erweitert wird, aber wenn der Bildschirm aus und es erscheint.

Wer weiß, warum das passiert, oder was kann ich tun, um es zu lösen?

+0

vielleicht können Sie immer überlegen, die singleton mapView zu Ihrem mapContainer hinzufügen, aber mit der Sichtbarkeit geige. z.B. Nicht ausgewählte Zeilen setVisibility (View.GONE), die ausgewählte Zeile setVisibility (View.VISIBLE). Ändert dies das Verhalten? – CSmith

+0

Bitte beachten Sie diesen Link http://stackoverflow.com/questions/2961275/android-mapview-contained-within-a-listview hoffe, es hilft –

Antwort

1

Vielleicht können Sie eine Holder-Klasse implementieren. Eine, die eine Instanz in Ihrem MapView enthält, damit sie wiederhergestellt werden kann.

Im letzten Beispiel wird HERE gezeigt, wie man das mit anderen Ansichten macht.