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.
- Agregar botones a PreferenceFragment
- Viewpageindicator dentro del fragmento
- Apertura suave del teclado de Android
- Determinar el fragmento visible en ViewPager
- ¿Hay una manera de mostrar fragmentos en TabHost?
¿Hay alguna manera de desactivar o activar las pestañas? Sin tener que quitar y agregar de nuevo?
¡Gracias por adelantado! BR, Danilo
- Android ViewPager con la pestaña que no mantiene el estado tras la rotación de la pantalla
- Android TabsAdapter con ActionbarSherlock
- Llamar a un método Fragment de una actividad principal
- Android - SupportMapFragment con GoogleMaps API 2.0 dando IllegalArgumentException
- Admob en fragmentos
- No se puede extraer del fragmento
- Fragmentos de acceso Ver desde fuera Método OnCreateView
- El desplazamiento de ViewPager no funciona con RecyclerView
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/
- Problema de orden de consultas SQLite de Android
- Los elementos ListView no se ponen visualmente "resaltados" cuando se seleccionan durante el modo de acción contextual