MapFragment en las pestañas de barra de acción

Estoy intentando crear una aplicación que implementará las pestañas de la barra de acción. Una de las pestañas debe contener un MapFragment.

¿Cómo puedo implementar una barra de acción con pestañas, bajo una de las cuales es un mapa Fragmento?

¿Puede usted ayudarme con cómo proceder con esto?

Esto es lo que tengo hasta ahora:

clase principal

package com.nfc.demo; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; public class NFCDemoActivity extends Activity { Tab selectedTab = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar bar = getActionBar(); bar.setDisplayShowHomeEnabled(false); bar.setDisplayShowTitleEnabled(false); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setCustomView(R.layout.main); ActionBar.Tab mapTab = bar.newTab().setText("Map"); ActionBar.Tab settingsTab = bar.newTab().setText("Settings"); ActionBar.Tab aboutTab = bar.newTab().setText("About"); MapFragment mapFragment = new MapFragment(); SettingsFragment settingsFragment = new SettingsFragment(); AboutFragment aboutFragment = new AboutFragment(); mapTab.setTabListener(new TabListener(mapFragment)); settingsTab.setTabListener(new TabListener(settingsFragment)); aboutTab.setTabListener(new TabListener(aboutFragment)); Tab selectedTab = (Tab) getLastNonConfigurationInstance(); if (selectedTab == null) { bar.addTab(mapTab, false); bar.addTab(settingsTab, false); bar.addTab(aboutTab, true); } setContentView(R.layout.main); } public Object onRetainNonConfigurationInstance() { return selectedTab; } protected boolean isRouteDisplayed() { return false; } protected class TabListener implements ActionBar.TabListener { private Fragment fragment; public TabListener(Fragment fragment) { this.fragment = fragment; } public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) { fragmentTransaction.replace(R.id.mainFragment, this.fragment, null); selectedTab = tab; } public void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) { fragmentTransaction.remove(this.fragment); } public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) { //do nothing } } } 

Las clases de Fragment son simplemente devolver un inflado con un diseño .xml.

Diseño XML:

Main.xml (el mapa debe estar en este archivo XML)

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > </LinearLayout> 

Settings.xml Y about.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/textView123" android:text="asdfg" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

He estado tratando de averiguar cómo proceder durante un par de días, pero estoy realmente confundido. Cualquier ayuda / consejos sería muy apreciada.

Además, ¿qué pasa con getLastNonConfigurationInstance() ? Está obsoleto.

En la siguiente solución, es posible agregar un GoogleMap a una pestaña de la barra de acción / desplegable. La clave para hacerlo consiste en configurar correctamente el fragmento para destruir el MapFragment al cambiar a otro fragmento en la barra de acciones.

Cree una actividad que implemente la funcionalidad de la barra de acciones:

  1. Cree un proyecto en Eclipse que utilice Tabulaciones para la actividad principal. Si no lo hace, proceda a los pasos 2-5.
  2. Cree una clase que extienda Activity e implemente ActionBar.OnNavigationListener .
  3. Cree un archivo XML de presentación que sea un contenedor para los fragmentos de pestaña cuando cambie entre ellos.
  4. Implementar / anular el siguiente método en su clase de actividad: public boolean onNavigationItemSelected(int position, long id) .
  5. En este método, cambie entre el objeto de position para determinar la pestaña seleccionada y establezca el fragmento en una nueva instancia usando el FragmentManager como este: getFragmentManager().beginTransaction().replace(R.id.container, fragment).commit() .

Crear un fragmento que contiene el mapa:

  1. Cree una clase que extienda Fragment para utilizarla como fragmento de su ficha. Lea [ 1 ] para entender mejor el MapFragment.
  2. Cree un archivo XML de diseño que contenga un elemento de fragmento (como se ve en [ 1 ]). Utilice el XML en esa página para crear un archivo XML de diseño y utilizarlo en su clase de fragmento.
  3. Inflar ese archivo XML de diseño en su clase de fragmento reemplazando onCreateView .
  4. Su aplicación debe mostrar un mapa en la pestaña que utiliza su clase de fragmento, sin embargo, cambiar a otra pestaña y volver a la pestaña de mapa resultará en un ID de vista duplicado. Para superar esto, continúe con el siguiente paso.
  5. En su clase de fragmento, reemplace el siguiente método para destruir específicamente el objeto de GoogleMap subyacente para que pueda ser recreado cuando la pestaña de mapa cargue de nuevo su clase de fragmento:
 @Override public void onDestroyView() { super.onDestroyView(); MapFragment f = (MapFragment) getFragmentManager().findFragmentById(R.id.map); if (f != null) getFragmentManager().beginTransaction().remove(f).commit(); } 

No estoy seguro si ya lo resolvió o no. Tienes que agregar servicios de Google Play como proyecto de biblioteca para que funcione. Primero intenté agregar el archivo jar, pero eso no funcionó.

  • Android SupportMapFragment no puede ver el mapa dentro de un fragmento
  • Strange ArrayIndexOutOfBoundsException en algunos dispositivos al dibujar polilíneas
  • Cómo dibujar polilla discontinua con android google map sdk v2?
  • Cómo utilizar MyLocation-Button en Google Map API V2
  • Ampliación de Google Maps Android API v2 para proporcionar panorámicas y eventos de zoom
  • Cómo mostrar mi ubicación en Google Maps para Android API v2
  • Infowindow personalizado con google maps api v2
  • ¿Cómo puedo mostrar la ubicación actual en un Google Map en Android Marshmallow?
  • Android: java.lang.NoClassDefFoundError: com.google.android.gms.R $ styleable
  • GoogleMaps v2 para Android: No se puede eliminar el marcador mientras se está procesando el mapa
  • Obtener Android Google Map v2 trabajando en la versión de lanzamiento mediante la generación de huella digital SHA1 para la clave de la API
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.