Android Tabs + Sliding, ¿cómo implemento ActionBarSherlock?

Estoy utilizando las nuevas herramientas de Google para iniciar una aplicación que tiene la capacidad de cambiar entre tres pestañas.

Introduzca aquí la descripción de la imagen

Esto es genial, pero carece de soporte para dispositivos antiguos.

1. He añadido ABS con la biblioteca de soporte a la aplicación.

2. He cambiado public class MainActivity extends FragmentActivity implements ActionBar.TabListener { a public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {

3. Todavía me queda un montón de errores, y ni siquiera sé si esto funcionará correctamente en los dispositivos más antiguos. ¿Alguien tiene consejos sobre cómo implementar pestañas deslizantes compatibles con 2.x y más?

Introduzca aquí la descripción de la imagen

Actualizar:

Estoy atascado en el paso 6 de la respuesta de alextsc Introduzca aquí la descripción de la imagen

El mismo proceso funcionó para mí. Quité todas las importaciones y presioné ctrl + shift + o y seleccioné las clases de compatibilidad. Funcionó absoulutely bien. Ver el post aquí .

He intentado este asistente una vez y creo que tiré el código generado completamente cuando implementé este patrón exacto con ActionBarSherlock, por lo que le sugiero comenzar con una actividad normal "en blanco" desde cero. Aquí hay una pequeña guía paso a paso. No todos los pasos se describen completamente, pero debe encontrar suficiente documentación con las palabras clave para empezar.

1) Agregue ActionBarSherlock a su proyecto (obviamente)

2) Cree una nueva actividad que extienda SherlockFragmentActivity y establezca un tema apropiado de abs

Debería tener una actividad en blanco con una barra de acción en este punto.

3) Cambie el diseño e incluya un ViewPager que rellene la ventana de visualización

4) Escriba sus fragmentos (o marcadores de posición por ahora) y el adaptador para ViewPager, conecte estos juntos

Hay un montón de tutoriales por ahí que explican todo lo necesario aquí, por ejemplo, esta entrada del blog .

Esto le dará una actividad con una barra de acción y un diseño deslizable. Ahora puede pasar entre sus fragmentos.

5) Agregue las pestañas de la barra de acción y adjunte un listener blanco a ellas

Ejemplo:

 actionBar = getSupportActionBar(); sampleTab = actionBar.newTab() .setText(R.string.title) .setTag(TABTAG_SAMPLE) .setTabListener(tabListener); actionBar.addTab(sampleTab); 

Asegúrese de dar a cada una de sus pestañas una etiqueta individual (una cadena const está bien). Esto se utilizará para identificar qué pestaña se hace clic en un segundo. También asegúrese de mantener las instancias de tabulación creadas en una variable de clase. Los necesitará más adelante. Repita el fragmento anterior para cada ficha. Puede usar un TabListener normal, pero recomiendo usar el SimpleTabListener ya que solo necesita anular un método más tarde.

Ahora debe tener una actividad con la barra de acción, fragmentos que se pueden deslizar y pestañas (no funcionales).

6) Llene el oyente de la pestaña y conéctelo al viewpager

 private SimpleTabListener tabListener = new SimpleTabListener() { @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { final String tag = (String) tab.getTag(); if (TABTAG_SAMPLE.equals(tag)) { viewPager.setCurrentItem(INDEX_SAMPLE); } else if (TABTAG_SECONDTAB.equals(tag)) { viewPager.setCurrentItem(INDEX_SECONDFRAGMENT); } } }; 

Esto debería ser sencillo. Escucha un evento de selección de ficha, comprueba qué pestaña se selecciona mediante la etiqueta guardada y llama al método setCurrentItem() los viewpagers con el índice del fragmento que está asociado con una determinada pestaña.

Ahora usted debe ser capaz de seleccionar un fragmento a través de una pestaña, así como deslizar alrededor. Observará que el desplazamiento a un fragmento determinado no sincronizará las pestañas en consecuencia, no se seleccionará correctamente todavía.

7) Adjuntar un OnPageChangeListener a su ViewPager y seleccionar las pestañas en consecuencia

Una vez más, puede utilizar un SimpleOnPageChangeListener aquí también en lugar de la interfaz. Ejemplo corto:

 private SimpleOnPageChangeListener onPageChangeListener = new SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { switch (position) { case INDEX_SAMPLE: actionBar.selectTab(sampleTab); break; case INDEX_SECONDFRAGMENT: actionBar.selectTab(secondTab); break; } }; }; 

Esto también debe ser auto-explicativo. Observa una acción de desplazamiento que cambia el fragmento que se muestra, comprueba su índice y selecciona la pestaña apropiada. Vea aquí por qué tenía que mantener las instancias de tabulación desde el paso 5 alrededor, necesita que seleccione una pestaña.

Todo debería funcionar ahora.

Yo recomendaría echar un vistazo a ViewPagerIndicator funciona con ActionBarSherlock y la biblioteca de compatibilidad, actualmente tengo una aplicación que utiliza esto para pasar las pestañas en 2.2 y más.

He implementado la aplicación muy complicada usando barra de acción sherlock. Funciona bien en 2.2 a los dispositivos ICS que he probado. También usé pestañas y todo funciona bien. Lo cambié más tarde a la lista de navegación porque debería haber 6 pestañas. Pruebe las demos incluidas con la barra de acción para empezar. Estos errores son probablemente algunos problemas de classpath. Es necesario agregar sherlock como lib proyecto y la biblioteca de soporte debe ser incluido en el proyecto sherlock lib y su proyecto. También compruebe si ambas bibliotecas de soporte deben tener las mismas versiones.

No puedo agregar comentarios, así que este es mi comentario a ViewPagerIndicator. Yo solía hacerlo, pero cuando empecé a usar cargadores para cargar datos y fragmentadapter a veces había problemas extraños cuando llegaban nuevos datos, la orientación cambiaba … Pero usar las pestañas con actionbarsherlock ViewPagerIndicator no es necesario.

  • Java cómo manejar "Cast no verificado" para Array <MyItem> desde el objeto
  • ¿Cuáles son las consecuencias de tener el ID de SENDER de GCM expuesto?
  • ¿Cómo puedo abrir el calendario desde mi aplicación?
  • Cómo llamar a invalidate () tarde a ViewPager
  • ¿Cómo diferenciar entre un fling y un toque?
  • NDK vs JAVA rendimiento
  • Desarrollo de Android en eclipse: la actividad 1 cambia a la actividad 2 bien, no 3
  • Depurar el proyecto de la biblioteca de Android con el código fuente de java
  • Android WebView: bloqueo tras la carga de url
  • Android: ¿define TextView TextStyle mediante programación?
  • Error al transformar el archivo '45907c80e09917e1b776adf038505958' para que coincida con los atributos {artifactType = jar} usando transform AarTransform
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.