¿Es posible utilizar MapView con FragmentManager y ListFragment?

Mi aplicación está utilizando un ListFragment en el lado izquierdo que el usuario puede utilizar para seleccionar qué fragmento utilizar en el lado derecho.

En orden, parece imposible mostrar el MapView más de una vez. El primer problema es que sólo permiten una instancia de MapView por actividad.

# Exception 1: You are only allowed to have a single MapView in a MapActivity 

Por lo tanto, guardé mi MapView y contenedor en la clase de actividad:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager.enableDebugLogging(true); setContentView(R.layout.main); mapViewContainer = LayoutInflater.from(this).inflate(R.layout.maplayout, null); mapView = (MapView) mapViewContainer.findViewById(R.id.map_view); } 

Sin embargo, esto me da el siguiente problema:

 # Exception 2: The specified child already has a parent. You must call removeView() on the child's parent first. 

He intentado eliminar la vista, usando este código:

 ((ViewGroup)mapViewContainer).removeView(mapView); ((ViewGroup)mapView.getParent()).removeView(mapView); 

Tengo una NullPointerExeption.

Le agradecería cualquier buena idea, o si podría compartir si ha tenido éxito en hacer esto?

Gracias 🙂

Sí, me encontré con esto también.

No agregue su MapView en el archivo de diseño XML para su fragmento. En su lugar, simplemente deje un lugar para ello, digamos, en un LinearLayout con id = "@ + id / your_map_container_id"

Declare un miembro privado de MapView en YourMapContainerFragment:

 public class YourMapContainerFragment extends Fragment { private MapView mMapView; //... 

Entonces, vaya como esto en OnCreateView de YourMapContainerFragment ():

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // ... Inflate your fragment's layout... // ... if (mMapView == null) { mMapView = new MapView(getActivity(), /*String*/YOUR_MAPS_API_KEY); } else { ((ViewGroup)mMapView.getParent()).removeView(mMapView); } ViewGroup mapContainer = (ViewGroup) fragmentLayout.findViewById(R.id.your_map_container_id); mapContainer.addView(mMapView); // ... } 

Esto hará que el mismo objeto MapView se reutilice a través de las extracciones / adiciones de su fragmento a la actividad.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.