2012-04-13 33 views
26

Una de las principales recomendaciones de diseño en Android 4.0 para pestañas es allow swiping entre ellas cuando corresponda. Este comportamiento permite a los usuarios deslizar horizontalmente a través del contenido de la pestaña seleccionada para navegar a pestañas adyacentes, sin necesidad de interactuar directamente con las pestañas.¿Cómo implemento deslizar entre pestañas en Android?

¿Cómo se puede implementar esto?

Respuesta

34

NOTA: Este es un extracto de la clase Android TrainingImplementing Effective Navigation.


Para implementar esto (en Android 3.0 o superior), se puede utilizar un ViewPager en conjunción con la API ActionBar pestañas.

Al observar el cambio de página actual, seleccione la pestaña correspondiente. Puede configurar este comportamiento usando un ViewPager.OnPageChangeListener en el método de su actividad onCreate():

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 
    mViewPager.setOnPageChangeListener(
      new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        // When swiping between pages, select the 
        // corresponding tab. 
        getActionBar().setSelectedNavigationItem(position); 
       } 
      }); 
    ... 
} 

Y después de seleccionar una ficha, cambie a la página correspondiente en el ViewPager. Para ello, agregue un ActionBar.TabListener a la pestaña cuando se crea utilizando el método newTab():

actionBar.newTab() 
     ... 
     .setTabListener(new ActionBar.TabListener() { 
      public void onTabSelected(ActionBar.Tab tab, 
        FragmentTransaction ft) { 
       // When the tab is selected, switch to the 
       // corresponding page in the ViewPager. 
       mViewPager.setCurrentItem(tab.getPosition()); 
      } 
      ... 
     })); 
+1

Hi Roman, Por favor encuentre un ejemplo que implemente el adaptador ant para implementar diseños de paneles múltiples que contengan múltiples fragmentos creados/reemplazables dinámicamente. Desafíos: - FragmentManager utiliza una ID de recurso para agregar fragmentos; Los identificadores deben ser únicos en todas las páginas (no se puede especificar una instancia de ViewGroup como contenedor) - Las vistas de contenedor deben existir antes de que FragmentManager intente restaurar los fragmentos - Instancias retenidas frente a cambio de orientación error # 1: NullPointerException cuando FragmentManager intenta guardar Estado del fragmento; # 2: NullPointerException alrededor de LoaderInfo.onLoadComplete – user289463

+1

Deberías hacer esto como una nueva pregunta. –

+0

Suceden cosas extrañas si agrega iconos de menú a la barra de acciones y utiliza ViewPager de esa manera ... – Maxim

12

Si el idioma de las API de Android 3.0 a continuación, no se puede utilizar la solución de Roman anteriormente.

Escribí un blog post here sobre cómo lograr lo mismo con ActionBarSherlock si alguien está interesado.

+0

Es posible utilizar la solución para versiones anteriores si agrega la biblioteca de soporte de compatibilidad de Android http://developer.android.com/tools/extras/support-library.html. Con el último plugin de Eclipse ADT es tan fácil como hacer clic derecho en el proyecto y seleccionar 'Herramientas Android'>' Agregar biblioteca de soporte'. El proyecto deberá compilarse con API 14 o superior (es decir, Android 4 o superior) mientras se utiliza un manifiesto con p. Ej. '' para ejecutar en Android 2.1. – ccpizza

+1

@ JesperB: ¿qué sucede si tengo que implementar Deslizar entre pestañas en mi TabHost para API de orientación de aplicaciones Android debajo de Android 2.3.3 y sin utilizar ActionBarSherlock? ¿Me puedes sugerir algo para eso? –

+1

@ JesperB-De hecho, ya he hecho que la aplicación con tabview funcione perfectamente bien ... ¡Solo necesito actualizar la función de Deslizar! –

Cuestiones relacionadas