6

Tengo una actividad con ListView, donde cada elemento se puede expandir al hacer clic, mostrando un mapView. Si se hace clic en otro elemento, el elemento abierto se cierra. La actividad se extiende MapActivity, y sólo hay una instancia de MapView, que elimino y añadir a los elementos que sean necesarios como esto:MapView in a listVer artículo

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

Funciona bien la mayor parte del tiempo, pero cuando la pantalla se apaga y de nuevo, o el elemento abierto se desplaza fuera de la pantalla y viceversa, el mapView desaparece. Sé que esto se debe a que listView está reciclando la vista. Si trato de conectar el mapa en getView() (si la vista está en la posición abierta):

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

} el mapa desaparece cuando el artículo está totalmente expandido, pero cuando la pantalla se apaga y en él sí aparece.

¿Alguien sabe por qué sucede esto o qué puedo hacer para solucionarlo?

+0

quizás pueda considerar SIEMPRE agregar el mapView singleton a su mapContainer, pero toque la Visibilidad. p.ej. filas no seleccionadas setVisibility (View.GONE), la fila seleccionada setVisibility (View.VISIBLE). ¿Esto cambia el comportamiento? – CSmith

+0

Por favor, consulte este enlace http://stackoverflow.com/questions/2961275/android-mapview-contained-within-a-listview espero que ayude –

Respuesta

1

Tal vez pueda implementar una clase Holder. Uno que contiene una instancia de su MapView para que pueda ser restaurado.

En el último ejemplo HERE se muestra cómo hacer eso con otras vistas.