Cómo mostrar el fragmento seleccionado en la pestaña de la barra de acción
Estoy enfrentando un problema con respecto a la pestaña. Mi proyecto se basa en Android 3.2. Estoy implementando el desplazamiento de tab con la biblioteca de soporte 4.0 (android-support-v4.jar). Todo lo implementado está funcionando bien, pero cuando implemento mi aplicación en un dispositivo ICS, entonces en modo retrato, estoy obteniendo un giro en la barra de acción para la selección de pestañas. En el modo de retrato, la selección de pestañas no cambia cuando se realiza el deslizado aunque el contenido está cambiando y todo funciona bien en modo horizontal.
final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayHomeAsUpEnabled(true); // Set up the ViewPager with the sections adapter. ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } });
He intentado poner el punto de interrupción actionBar.setSelectedNavigationItem(position);
En esta línea e incluso en el modo de retrato se está llamando, pero la selección no está cambiando.
- Samsung Galaxy S4 desalinea el icono de la barra de herramientas
- RequestFeature con barra de acción
- Barra de herramientas alinear el título en el centro con el botón Atrás
- El menú de la barra de acciones muestra la pantalla
- Lengüetas de la barra de la acción de Android
¿Alguien puede ayudar con esto?
EDITADO: Encontrado un problema similar, pero no veo exactamente cómo se resuelve y cómo integrarlo en mi código.
- Barra de acción dividida en Android 5.0 (Lollipop)
- Modo de acción cerrar el color del texto del botón
- App: showAsAction vs android: showAsAction
- ¿Cómo cambio el color de la flecha hacia arriba de la barra de acciones?
- Configurar OnClickListener en el icono de inicio de la barra de acción hace que el icono pierda el estado de la prensa
- ¿Cómo obtener la altura de ActionBar?
- Evita cancelar el modo de acción pulsando el botón de retroceso
- ActionBar y ActionBar.Tab y el cajón de navegación android
Problema: Debido a un estado real insuficiente, la plataforma utiliza la navegación colapsada (es decir, Spinner). El sistema determina automáticamente NAVIGATION_MODE_TABS para el paisaje y NAVIGATION_MODE_LIST para el retrato, cambiando la orientación del paisaje al retrato actualiza la interfaz de usuario, pero por alguna razón no actualiza la propiedad del modo de navegación a NAVIGATION_MODE_LIST y, por lo tanto, no se llama mActionView.setDropdownSelectedPosition (posición). Vea el siguiente código de ActionBarImpl: setSelectedNavigationItem
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"); } }
Solución alternativa: A través de la reflexión podemos obtener el objeto spinner de tabulación y llamar al método setSelection.
private Spinner getTabSpinner() { try { int id = getResources().getIdentifier("action_bar", "id", "android"); View actionBarView = findViewById(id); Class<?> actionBarViewClass = actionBarView.getClass(); Field mTabScrollViewField = actionBarViewClass.getDeclaredField("mTabScrollView"); mTabScrollViewField.setAccessible(true); Object mTabScrollView = mTabScrollViewField.get(actionBarView); if (mTabScrollView == null) { return null; } Field mTabSpinnerField = mTabScrollView.getClass().getDeclaredField("mTabSpinner"); mTabSpinnerField.setAccessible(true); Object mTabSpinner = mTabSpinnerField.get(mTabScrollView); if (mTabSpinner != null) { return (Spinner)mTabSpinner; } } catch (Exception e) { return null; } return null; }
A continuación, llame al método anterior en el evento onPageSelected.
public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); Spinner spinner = getTabSpinner(); if (spinner != null) { spinner.setSelection(position); } }
Referido este mensaje https://gist.github.com/2657485
- Cómo configurar el ecualizador de audio en android
- ¿Cómo puedo cambiar el color del textView android.R.layout.simple_spinner_dropdown_item?