Activar / desactivar Android ActionBar.Tab

Estoy desarrollando una aplicación que utiliza el nuevo sistema Tabs (ActionBar.addTab ()), tendré 3 pestañas. Durante un determinado proceso me gustaría bloquear (desactivar) dos de ellos (no quitar, sólo no aceptar los clics y no cambiar el "selector".

No pude cambiar el contenido (implementando el TabListener y no cambiar el fragmento, etc), pero el selector cambia.

¿Hay alguna manera de desactivar o activar las pestañas? Sin tener que quitar y agregar de nuevo?

¡Gracias por adelantado! BR, Danilo

Lo sentimos, no hay "habilitar" o "deshabilitar" con pestañas en la barra de acción. Como usted nota, usted puede quitar y re-add ellos – que es el más cercano usted puede conseguir AFAIK.

Me metí en el mismo tema. Finalmente fue capaz de resolverlo. Como ya se dijo, no hay manera de desactivar / habilitar una pestaña. Sólo hay una salida – y eso es volver a la pestaña anterior usando

 getActionBar().setSelectedNavigationItem(tab); 

Tenga en cuenta, sin embargo, que esto NO debe hacerse

 onTabSelected(ActionBar.Tab tab,FragmentTransaction fragmentTransaction) 

Método, porque entonces se queda atascado en bucle recursivo. Así que dentro de onTabSelected () – envíe un mensaje al Activity Handler para hacer setSelectedNavigation ().

Una captura aquí es (usted sabrá cuando se implementa): qué "tab" valor para pasar en el setSelectedNavigation. Para esto, tenemos que seguir un seguimiento de si es un usuario presionó el interruptor de la lengüeta o el interruptor forzado a la última lengüeta vía el código.

Para esto:

 public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { if (forcedTabSwitch) forcedTabSwitch = false; else mTabToBeSwitchedTo = tab.getPosition(); } 

Y en el Handler,

 switch (msg.what) { case SWITCH_TO_TAB : forcedTabSwitch = true; break; } 

También me enfrenté al mismo problema. Mi aplicación tiene tres pestañas y cada pestaña tiene botones para pasar a la pestaña siguiente y anterior. No encuentro ningún método para activar o desactivar la ficha.

Utilicé la clase DataSetter para mantener la posición de tabulación previamente seleccionada y el valor booleano para determinar la selección de tabulación. Si el indicador booleano es verdadero, el usuario ha pulsado el botón siguiente / anterior. De lo contrario, el usuario está intentando seleccionar la pestaña pulsando las que no permitimos.
Utilicé handler para el fragmento de la selección de la lengüeta. Cuando el usuario hace clic en el siguiente botón, emite esa solicitud. La petición de difusión tiene un parámetro entero que es la posición de la pestaña siguiente o anterior que queremos establecer. Código dentro del fragmento es:

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.first_tab_fragment, container, false); next = (Button)rootView.findViewById(R.id.nextbutton); next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent("TAB_CLICKED"); Bundle bundle = new Bundle(); bundle.putInt(MainActivity.POSITION,1); intent.putExtras(bundle); getActivity().sendBroadcast(intent); } }); return rootView; } 

He utilizado CustomViewPager en lugar de ViewPager para evitar el desplazamiento de tabulación. La clase CustomViewPager es:

  public class CustomViewPager extends ViewPager { private boolean enabled; public CustomViewPager(Context context) { super(context); } public CustomViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if (this.enabled) { return super.onTouchEvent(event); } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if (this.enabled) { return super.onInterceptTouchEvent(event); } return false; } public void setPagingEnabled(boolean enabled) { this.enabled = enabled; } } 

Dentro del método oncreate de MainActivity.java añada estas dos líneas:

  viewPager = (CustomViewPager) findViewById(R.id.pager); viewPager.setPagingEnabled(false); 

A continuación se muestra el código restante de MainActivity.java:

  @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { Log.d("MainActivity","onTabSelected"); if(setter.getFlag() == true) { viewPager.setCurrentItem(setter.getposition()); } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub Log.d("MainActivity","onTabUnselected"); //handler.sendEmptyMessage(0); Message message = new Message(); message.arg1 = setter.getposition(); handler.sendMessage(message); } Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { int arg1 = msg.arg1; Log.d("arg1",arg1+""); //viewPager.setCurrentItem(arg1); mActionBar.setSelectedNavigationItem(arg1); Log.d("handler","Inside handler"); } }; BroadcastReceiver receiver = new BroadcastReceiver(){ public void onReceive(Context context, android.content.Intent intent) { String action = intent.getAction(); Bundle bundle = intent.getExtras(); int position = bundle.getInt(MainActivity.POSITION); Log.d("Action",action); Log.d("position",position+""); setter.setposition(position); setter.setflag(true); Message message = new Message(); message.arg1 = position; handler.sendMessage(message); }; }; } 

Por último DataSetter.java:

  public class DataSetter { int position; boolean flag; void setposition(int value) { position = value; } void setflag(boolean value) { flag = value; } int getposition() { return position; } boolean getFlag() { return flag; } } 

Más que puedes encontrar en: http://suhas1989.wordpress.com/2014/10/13/enable-or-disable-actionbar-tab-in-android/

  • OnActivityResult () no se llama en el nuevo API de fragmentos anidados
  • Ocultar Soft Keyboard en la aplicación para Android Desde fragmentos de ViewPager
  • Cómo crear este efecto de aplicación de Gmail en Honeycomb
  • Reinicialización de tejido de Twitter después de tiempo de inactividad aplicación android
  • Android: no se puede destruir la actividad después de terminar, causada por IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
  • AddToBackStack () no funciona
  • El método getApplicationContext () es indefinido - fragmento de problemas
  • Android: Fragment y ViewPager comienza siempre en la primera posición
  • Método de llamada desde Fragmento en ViewPager
  • Archivo binario línea # 9: Error al inflar fragmento de clase
  • No se pueden utilizar Fragmentos con el paquete de compatibilidad con Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.