2010-08-09 18 views
6

Tengo una pestaña en mi aplicación de Android con 3 pestañas. Las pestañas funcionan bien.Captura del evento de clic de pestaña en Android Tabview

Ahora quiero realizar un poco de lógica adicional cuando se hace clic en la pestaña (en la parte superior) de la pestaña actualmente activa.

Aquí se muestra un ejemplo:

En una de mis pestañas, proporciono una opción para el usuario ordenar las cosas en orden diferente. Cuando presione la pestaña de la pestaña actualmente activa, quiero restablecer todos estos ordenamientos.

¿Es posible capturar el evento de clic de pestaña en tabview y realizar alguna lógica adicional?

Editar: Editado para mayor claridad.

+0

'TabHost.OnTabChangeListener' – st0le

+1

TabHost.onTabChangeListener se activa solo cuando se cambia la pestaña. Pero quiero que se dispare el evento, incluso si se hace clic en el encabezado de la pestaña actualmente activa. ¿Es posible hacer eso? – Sudar

Respuesta

4

Así es como su código debería funcionar:

getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     //do whatever you need 

     } 
}); 
+0

Gracias, este código funciona. Pero está introduciendo un nuevo problema. Ahora las pestañas no se cambian cuando se hace clic. ¿Debo llamar a algún método adicional para cambiar las pestañas? – Sudar

+0

Estoy trabajando para resolver este problema también ... hasta ahora no tengo una respuesta si no para implementar su propio código de "conmutación". Si tiene éxito, por favor comparta :) http://stackoverflow.com/questions/4337514/android-tabwidget-detect-click-on-current-tab – 0m4r

+0

Vikas muestra una solución para cambiar las pestañas. Dentro del oyente, agregue: getTabHost(). SetCurrentTab (getTabHost(). GetCurrentTab()); O si el getCurrentTab() da problemas, cree un int final con el índice de la pestaña fuera del oyente, y use eso en su lugar. – Niels

0
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
    { 
     getTabWidget().getChildAt(i).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if (getTabHost().getCurrentTabTag().equals(v.getTag())) 
       { 
        int nextTab = getTabHost().getCurrentTab(); 
        tabHost.setCurrentTab(prevTab); 
        tabHost.setCurrentTab(nextTab); 
        prevTab = nextTab; 
       } 
       else 
        tabHost.setCurrentTabByTag((String) v.getTag()); 
      } 
     }); 
    } 

Usted necesita una variable global;

private int prevTab = 1; //any tab except the initial one. 

Este código funciona para mí. Algo feo es que debe establecer la misma etiqueta para la pestaña y ver Por ejemplo;

intent = new Intent().setClass(this, AnaSayfa.class); 
    spec = tabHost.newTabSpec("firstTab").setIndicator(makeTabIndicator(R.drawable.firstTab, "First Tab" , "firstTab")) 
        .setContent(intent); 
    tabHost.addTab(spec); 

y el método makeTabIndicator es así,

private View makeTabIndicator(int drawable, String text, String viewTag){ 

     View view = LayoutInflater.from(this).inflate(R.layout.tab_layout, null); 

     ImageView image = (ImageView) view.findViewById(R.id.imageView1);  
     image.setImageResource(drawable); 
     image.setAdjustViewBounds(true); 

     TextView tv = (TextView) view.findViewById(R.id.textView1); 
     tv.setText(text); 

     view.setTag(viewTag);    
     return view; 
    } 
3

encontré una solución limpia y fácil para la detección de clics en la pestaña seleccionada

pasos:

1: Extender TabActivity en su clase. 2: En el método onResume() aplicar el siguiente método

Para cada pestaña (i) poner en práctica esta:

TabHost tabHost = getTabHost(); 

public void onResume() { 

super.onResume(); 
    tabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        count++; 
        tabHost.setCurrentTab(0); 
    //based on your count value..you can do anything...like going back to homepage... 
    // similar thing exist on iphone (double tab a tab..it takes back to homepage) 
    } 
    }); 
}  

puesto que tenemos siempre un número fijo de fichas, su aplicación por separado no es un problema .

+0

¿Te refieres al método onResume() de la actividad?También sería útil si puedes mostrar un ejemplo completo. – Sudar

+0

@ Sudar..i han agregado código adicional ... espero que te ayude – Vikas

Cuestiones relacionadas