ver para google extensión extensiones extension descargas chrome camaras android actionbarsherlock android-viewpager landscape android-tabs

android - para - Barra de acciones Sherlock: las pestañas no cambiarán en el paisaje al deslizar



extensiones google (2)

Necesita agregar algún código en el proyecto de la biblioteca ActionBarSherlock en el archivo (ActionBarImpl.java) vea este enlace

Tengo una pantalla que usa las pestañas Sherlock de ViewPager + barra de acciones. Tengo setOnPageChangeListener configurado en el busca y hace lo siguiente:

@Override public void onPageSelected(final int position) { actionBar.setSelectedNavigationItem(position); }

Esto funciona bien en modo retrato e incluso en paisaje si solo tengo algunas pestañas y se muestran todas las pestañas. Sin embargo, si agrego algunas pestañas más en el paisaje, estas colapsan en un único widget desplegable. Cuando navego por setSelectedNavigationItem , se ejecuta el método setSelectedNavigationItem pero ahora no tiene efecto en la selección desplegable: permanece en el último valor seleccionado. Lo cual es realmente malo ya que al usuario le falta una pista visual: la pestaña puede decir "Uno" pero el usuario ya está en la página # 6.

¿Hay alguna manera de cambiar programáticamente qué pestaña mostrar en función de la posición?

PD. Sé por qué sucede esto: aquí está el código de com.android.internal.app.ActionBarImpl:

public void setSelectedNavigationItem(int position) { switch (mActionView.getNavigationMode()) { case NAVIGATION_MODE_TABS: selectTab(mTabs.get(position)); break; case NAVIGATION_MODE_LIST: mActionView.setDropdownSelectedPosition(position); break; default: throw new IllegalStateException( "setSelectedNavigationIndex not valid for current navigation mode"); } }

Y cuando lo paso, puedo ver que el modo de navegación sigue siendo NAVIGATION_MODE_TABS aunque las pestañas se muestran como una lista. Ahora, mi reacción instintiva es poner el código enConfigurationChanged para establecer el modo de navegación de manera apropiada, pero ¿no debería suceder esto automáticamente?

PPS Y ya hay un error de Android registrado que contiene el parche


Basado en el error de Android al que me refiero en la pregunta (ver PPS), aquí hay una solución que de hecho funciona. Solo agrégalo a tu busca

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.getTabAt(position).select(); ViewParent root = findViewById(android.R.id.content).getParent(); findAndUpdateSpinner(root, position); } /** * Searches the view hierarchy excluding the content view * for a possible Spinner in the ActionBar. * * @param root The parent of the content view * @param position The position that should be selected * @return if the spinner was found and adjusted */ private boolean findAndUpdateSpinner(Object root, int position) { if (root instanceof android.widget.Spinner) { // Found the Spinner Spinner spinner = (Spinner) root; spinner.setSelection(position); return true; } else if (root instanceof ViewGroup) { ViewGroup group = (ViewGroup) root; if (group.getId() != android.R.id.content) { // Found a container that isn''t the container holding our screen layout for (int i = 0; i < group.getChildCount(); i++) { if (findAndUpdateSpinner(group.getChildAt(i), position)) { // Found and done searching the View tree return true; } } } } // Nothing found return false; } });