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?
- Google Maps Android API v2 en China - la carga del mapa tomó alrededor de una hora
- ¿Cómo comprobar si un InfoWindow de Google Maps todavía se muestra antes de actualizarlo?
- Google Maps Android API v2 SoporteMapFragmento de pérdida de memoria
- ¿La API de ubicación de servicios de Google necesita Internet?
- API de Google MAPs para Android límite de 2500 solicitudes / día es por dispositivo cliente o por clave de aplicación?
¿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.
- Java.lang.StackOverflowError en com.google.maps.api.android.lib6.gmm6.lla
- ¿Cómo mostrar 2 vistas, con un gradiente de desvanecimiento efecto en Android?
- MapFragment en Fragment, alternativas?
- Cómo ocultar los botones "Navegación" y "Puntero GPS" cuando hago clic en el marcador en el mapa google de Android
- Google Maps V2 Android funciona como fragmento, pero muestra pantalla en blanco (con control de zoom) como fragmento de niño
- Google Maps Geolocation api: acceso no configurado
- Cómo convertir un dibujable en un mapa de bits para cambiar el color de un marcador en Google Maps Android API v2
- CursorAdapter para la actividad de GoogleMaps
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:
- Cree un proyecto en Eclipse que utilice Tabulaciones para la actividad principal. Si no lo hace, proceda a los pasos 2-5.
- Cree una clase que extienda
Activity
e implementeActionBar.OnNavigationListener
. - Cree un archivo XML de presentación que sea un contenedor para los fragmentos de pestaña cuando cambie entre ellos.
- Implementar / anular el siguiente método en su clase de actividad:
public boolean onNavigationItemSelected(int position, long id)
. - 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:
- Cree una clase que extienda
Fragment
para utilizarla como fragmento de su ficha. Lea [ 1 ] para entender mejor el MapFragment. - 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.
- Inflar ese archivo XML de diseño en su clase de fragmento reemplazando
onCreateView
. - 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.
- 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: ¿Existe un idioma para iterar a través de un SparseArray
- ACCESS_FINE_LOCATION SecurityException a pesar de especificar el permiso en el archivo de manifiesto