6

Ho un'attività con un listView, dove ogni elemento può essere espanso quando si fa clic, mostrando una mapView. Se viene fatto clic su un altro elemento, l'oggetto aperto viene chiuso. L'attività si estende MapActivity, e non v'è una sola istanza di mapview, che io rimuovere e aggiungere agli elementi in base alle esigenze del genere:MapView in a listView 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); 
} 

Funziona bene la maggior parte del tempo, ma quando lo schermo si spegne e di nuovo, o l'elemento aperto viene spostato fuori dallo schermo e indietro, la mapView scompare. Lo so perché la vista viene riciclata da listView. Se provo a collegare la mappa in GetView() (se la vista è in posizione aperta):

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

} la mappa scompare quando l'articolo è completamente espanso, ma quando lo schermo si spegne e su di esso appare.

Qualcuno sa perché questo succede o cosa posso fare per risolverlo?

+0

forse si può considerare SEMPRE aggiungere la mappa singletonView alla mappaContainer, ma armeggiare con la visibilità. per esempio. righe non selezionate setVisibility (View.GONE), la riga selezionata setVisibility (View.VISIBLE). Questo cambia il comportamento? – CSmith

+0

Si prega di fare riferimento a questo link http://stackoverflow.com/questions/2961275/android-mapview-contained-within-a-listview spero che aiuti –

risposta

1

Forse è possibile implementare una classe Holder. Uno che contiene un'istanza per il tuo MapView in modo che possa essere ripristinato.

Nell'ultimo esempio, HERE viene mostrato come farlo con altre viste.