6

Mam działanie z listView, gdzie każdy element można rozwinąć po kliknięciu, pokazując mapView. Jeśli klikniesz inny element, otwarty element zostanie zamknięty. Aktywność rozciąga MapActivity, a tam jest tylko jedna instancja MapView, co usunąć i dodać do elementów w zależności od potrzeb tak:MapView na liście Wyświetl element

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

To działa dobrze przez większość czasu, ale gdy ekran zgaśnie i z powrotem lub otwarty element przewija się poza ekranem iz powrotem, mapView znika. Wiem, że to dlatego, że widok jest przetwarzany przez listęViewView. Gdy próbuję dołączyć mapę w getView() (jeśli widok jest w pozycji otwartej):

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

} mapa znika, gdy element jest w pełni rozwinięty, ale gdy ekran zgaśnie, a na nim pojawia się.

Ktoś wie, dlaczego tak się dzieje lub co mogę zrobić, aby go rozwiązać?

+0

Być może można rozważyć ZAWSZE dodając singleton mapView do mapy Kontener, ale skrzypce z widocznością. na przykład niewybrane wiersze setVisibility (View.GONE), wybrany zestaw setVisibility (View.VISIBLE). Czy to zmienia zachowanie? – CSmith

+0

Proszę odnieść się do tego linku http://stackoverflow.com/questions/2961275/android-mapview-contained-within-a-listview nadzieję, że to pomaga –

Odpowiedz

1

Może zaimplementujesz klasę posiadacza. Jeden zatrzymuje instancję w MapView, aby można ją było przywrócić.

W ostatnim przykładzie pokazano, jak to zrobić w przypadku innych widoków: HERE.

Powiązane problemy