Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Las pestañas de Android ActionBar establecen la pestaña seleccionada inicialmente

He notado que al usar

actionBar.setSelectedNavigationItem(x) 

En el método onCreate () de mi Actividad, el elemento de pestaña en la posición 0 siempre se selecciona primero y luego se carga el elemento de pestaña en la posición x. Esto significa que (ya que estoy usando Fragmentos) 2 Fragmentos se cargan. Uno de ellos es innecesario …

Aquí está mi código:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Determine which bundle to use; either the saved instance or a bundle // that has been passed in through an intent. Bundle bundle = getIntent().getExtras(); if (bundle == null) { bundle = savedInstanceState; } // Initialize members with bundle or default values. int position; if (bundle != null) { position = bundle.getInt("selected_tab"); } else { position = 0; } // Set the tabs. ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); Tab tab = actionBar .newTab() .setText("Tab 1") .setTabListener( new TabListener<RendersGridFragment>(this, "1", RendersGridFragment.class)); actionBar.addTab(tab); tab = actionBar .newTab() .setText("Tab 2") .setTabListener( new TabListener<RendersGridFragment>(this, "2", RendersGridFragment.class)); actionBar.addTab(tab); tab = actionBar .newTab() .setText("Tab 3") .setTabListener( new TabListener<RendersGridFragment>(this, "3", RendersGridFragment.class)); actionBar.addTab(tab); actionBar.setSelectedNavigationItem(position); } 

Parece que la pestaña en la posición 0 se selecciona inicialmente de forma predeterminada. Pero, como se puede ver, estoy pasando paquetes para asegurarse de que la última pestaña seleccionada todavía está seleccionada cuando el método onCreate () de la actividad se ejecuta de nuevo.

Por ejemplo, si la última pestaña seleccionada está en la posición 2, se ejecuta onCreate () y la pestaña en posición es 0, entonces se carga la pestaña en la posición 2.

¿Cómo puedo asegurarme de que ActionBar no seleccione la pestaña en la posición 0 cuando use actionBar.setSelectedNavigationItem (posición).

  • ¿Es posible tener iconos en las pestañas de la barra de acción para Android?
  • poner pestañas en la parte inferior de la pantalla
  • Añadir pestaña dentro de Fragmento ¿En Android?
  • Java.lang.UnsupportedOperationException al tratar con widget de pestaña
  • Cambiar color TabSelector en v4 ViewPager
  • ActionBar Tabs con múltiples fragmentos
  • Cambiar el color de la línea en las pestañas - ActionBarSherlock
  • Cómo obtener DrawerLayout para deslizarse sobre la barra ActionBar
  • 6 Solutions collect form web for “Las pestañas de Android ActionBar establecen la pestaña seleccionada inicialmente”

    Utilice las otras llamadas addTab para anular este comportamiento. Deberá agregar primero la ficha que desea seleccionar (en su caso, la ficha en la posición 2). Relevante Javadoc

     actionBar.addTab(tab2); actionBar.addTab(tab0, 0, false); actionBar.addTab(tab1, 1, false); 

    Para cualquier otro que quiera hacer esto, también puede configurar la pestaña a seleccionada estableciendo la posición y luego establecer true o false para indicar qué pestaña debe seleccionarse

     actionBar.addTab(tab1, 0, false); actionBar.addTab(tab2, 1, true); actionBar.addTab(tab3, 2, false); 

    Aquí están los documentos sobre este enfoque: http://developer.android.com/reference/android/app/ActionBar.html#addTab(android.app.ActionBar.Tab, int, boolean)

    Usted puede utilizar abajo statment en el método del onStart del activtiy :

     protected void onStart() { super.onStart(); actionBar.selectTab(mainTab); } 

    Que la variable mainTab aquí es del tipo Tab. De esta manera es necesario definir pestañas como variables de clase como:

     Tab mainTab, tab2,tab3; @Override protected void onCreate(Bundle savedInstanceState) { //add tabs to action bar .... } 

    Si tiene 3 pestañas (es decir, ficha 0, pestaña 1, pestaña 2) y desea que la pestaña 1 esté preseleccionada. Hacer esto:

     for (int i = 0; i < mFragmentPagerAdapter.getCount(); i++) { boolean preselected = (i == 1); actionBar.addTab(actionBar.newTab().setText( mFragmentPagerAdapter.getPageTitle(i)).setTabListener(this), preselected); } 

    Usted estará usando:

     public abstract void addTab (ActionBar.Tab tab, boolean setSelected) 

    Según esta especificación de la API .

    La respuesta de bkurzius me ayudó a solucionar un problema que estaba teniendo con el mismo problema.

    Lo que hice fue:

     private final String TAB_SELECTED = "tab_selected" ... private int mTabSelected; ... mTabSelected = savedInstanceState.getInt(TAB_SELECTED); ... final ActionBar actionbar = getActionBar(); ... actionbar.addTab(tab1, mTabSelected == 0); actionbar.addTab(tab2, mTabSelected == 1); actionbar.addTab(tab3, mTabSelected == 2); ... outState.putInt(TAB_SELECTED, getActionBar().getSelectedNavigationIndex()); 

    De esta manera, el parámetro setSelected es true sólo si mTabSelected es igual al índice de la pestaña.

    La respuesta de Percy Vega parece ser la mejor solución de trabajo.

      for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { boolean preselected = (i == ErrorDetails.tab_id); actionBar.addTab( actionBar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setTabListener(this),preselected); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.