Cómo obtener fragmentos de mapas de Google en onCreateView con las pestañas de ActionBar

Estoy tratando de recuperar el fragmento Google Map mientras utilizaba Tabs en una ActionBar. Cuando carga la página con pestañas, el mapa se carga bien, pero quiero obtener el objeto del mapa para poder centrarlo, añadir marcadores, etc.

¿Hay una manera de hacer esto y si hay, alguien sería tan amable para mostrarme cómo?

Aquí está el código de mi página con pestañas …

El método específico con el que estoy trabajando es public static class Map extends Fragment

 public class Page3Activity extends FragmentActivity implements ActionBar.TabListener { final Context context = this; static GoogleMap map; static MapView mMapView; DatabaseHandler db = new DatabaseHandler(context); AppSectionsPagerAdapter mAppSectionsPagerAdapter; ViewPager mViewPager; @SuppressLint("NewApi") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.page3); // Create the adapter that will return a fragment for each of the three primary sections // of the app. mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager()); ColorDrawable colorDrawable = new ColorDrawable(); final ActionBar actionBar = getActionBar(); colorDrawable.setColor(0xff9ACC00); actionBar.setBackgroundDrawable(colorDrawable); actionBar.setTitle("Road Trip Calculator"); actionBar.setSubtitle("Trip Information"); actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE ); // Specify that the Home/Up button should not be enabled, since there is no hierarchical // parent. actionBar.setHomeButtonEnabled(false); // Specify that we will be displaying tabs in the action bar. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Set up the ViewPager, attaching the adapter and setting up a listener for when the // user swipes between sections. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mAppSectionsPagerAdapter); mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { // When swiping between different app sections, select the corresponding tab. // We can also use ActionBar.Tab#select() to do this if we have a reference to the // Tab. actionBar.setSelectedNavigationItem(position); } }); // For each of the sections in the app, add a tab to the action bar. for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page title defined by the adapter. // Also specify this Activity object, which implements the TabListener interface, as the // listener for when this tab is selected. actionBar.addTab( actionBar.newTab() .setText(mAppSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this)); } } /* * ACTIONBAR TOP BAR CODE */ @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { // When the given tab is selected, switch to the corresponding page in the ViewPager. mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the primary * sections of the app. */ public static class AppSectionsPagerAdapter extends FragmentPagerAdapter { public AppSectionsPagerAdapter(FragmentManager fm) { super(fm); } //Switching between tabs @Override public Fragment getItem(int i) { switch (i) { case 0: return new Map(); case 1: return new Directions(); case 2: return new poiList(); case 3: return new tripInfo(); default: i=i+1; } return null; } @Override public int getCount() { return 4; } @Override public String getPageTitle(int position) { String tabName = ""; if(position == 0) { tabName = "Map"; } else if(position == 1) { tabName = "Directions"; } else if(position == 2) { tabName = "POI List"; } else if(position == 3) { tabName = "Trip Info"; } return tabName; } } /** * Map */ public static class Map extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.maptab, container, false); //I want to be able to do something like this... /* GoogleMap map; SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map1); map = fm.getMap(); map.DOSOMETHING */ return rootView; } } /** * Directions */ public static class Directions extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.directionstab, container, false); ((TextView) rootView.findViewById(android.R.id.text1)).setText( "directions"); return rootView; } } /** * POI List */ public static class poiList extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.poitab, container, false); ((TextView) rootView.findViewById(android.R.id.text1)).setText( "poiList"); return rootView; } } /** * Trip Info */ public static class tripInfo extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.tripinfotab, container, false); ((TextView) rootView.findViewById(android.R.id.text1)).setText( "Trip Info"); return rootView; } } } 

Aquí está mi archivo XML (maptab.xml) que tengo mi fragmento de mapa en …

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:id="@+id/map1" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> </LinearLayout> 

Resuelto

  public static class Map extends Fragment { MapView mapView; GoogleMap map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.maptab, container, false); // Gets the MapView from the XML layout and creates it mapView = (MapView) v.findViewById(R.id.mapview); mapView.onCreate(savedInstanceState); // Gets to GoogleMap from the MapView and does initialization stuff map = mapView.getMap(); //map.getUiSettings().setMyLocationButtonEnabled(false); //map.setMyLocationEnabled(true); map.addMarker(new MarkerOptions().position(new LatLng(50.167003,19.383262))); // Needs to call MapsInitializer before doing any CameraUpdateFactory calls try { MapsInitializer.initialize(this.getActivity()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } // Updates the location and zoom of the MapView CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10); map.animateCamera(cameraUpdate); return v; } @Override public void onResume() { mapView.onResume(); super.onResume(); } @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); } } 

Puedes obtener referencia al fragmento que contiene tu mapa usando mViewPager.getItem(0) y luego mViewPager.getItem(0) al fragmento de Map y usarlo como quieras. Pero esto no es realmente muy buen diseño para operar en el fragmento desde el exterior. Así que te recomiendo que implementes toda la lógica de negocio relacionada con el mapa dentro del fragmento de Map , de esta manera no necesitas resolver ese tipo de problema, que publicaste y toda tu lógica de negocio está encapsulada dentro de un fragmento, que es portátil.

  • Dibujar texto en Google Maps ya no es posible?
  • PlaceAutoCompleteFragment en android no muestra sugerencias y se cierra después de ingresar la primera letra
  • Google Maps v2 En cajas de fragmentos cuando se hace clic dos veces
  • MapView muestra mosaicos vacíos en GoogleMaps API v2 para Android
  • Dibujar flecha en polilínea con Google Maps V2
  • DeslizamientoDirector sobre GoogleMap
  • Android Maps V2 pérdida de memoria LocationClientHelper
  • NoSuchFieldError: No hay campo estático MapAttrs de tipo cuando se utiliza MapFragment con Play Services 6.5
  • Android Maps API v2 dibujar círculo
  • SupportMapFragment en DialogFragment
  • java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout no se puede convertir en com.google.android.maps.MapView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.