2009-06-30 19 views
8

Saludos,OnClickListener de aquí que no trabaja

que estoy tratando de conseguir el clic - evento al hacer clic en la pestaña seleccionada en ese momento de mi TabActivity. El OnTabChangedHandler solo se invoca cada vez que se cambia la pestaña, no si se hace clic en la pestaña actualmente activa. El depurador me dice que tengo el onClickListener registrado para el TabWidget dentro de mi TabHost.

¿Me estoy registrando para la vista incorrecta?

Además, no puedo crear un menú contextual para las pestañas, solo por su contenido, ¿está relacionado este problema?

public class TestDroidViewTab extends TabActivity 
           implements TabContentFactory 
           , OnTabChangeListener, OnClickListener { 

    private static final String LOG_KEY = "TEST"; 
    ListView listView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final TabHost tabHost = getTabHost(); 


     TabHost.TabSpec ts = tabHost.newTabSpec("ID_1"); 
     ts.setIndicator("1"); 
     ts.setContent(this); 
     tabHost.addTab(ts); 

     ts = tabHost.newTabSpec("ID_2"); 
     ts.setIndicator("2"); 
     ts.setContent(this); 
     tabHost.addTab(ts); 

     ts = tabHost.newTabSpec("ID_3"); 
     ts.setIndicator("3"); 
     ts.setContent(this); 
     tabHost.addTab(ts); 
     tabHost.setOnClickListener(this); 
     tabHost.setOnTabChangedListener(this); 
    } 
    public void onClick(View v) { 
     Log.d(LOG_KEY, "OnClick"); 
    } 

    public void onTabChanged(String tabId) { 
     Log.d(LOG_KEY, "OnTabChanged"); 
    } 

Respuesta

10

uso setOnTabChangedListener en lugar de OnClickListener;)

static TabHost tabHost; 

    tabHost = getTabHost(); 


    tabHost.setOnTabChangedListener(new OnTabChangeListener() { 
     @Override 
     public void onTabChanged(String arg0) { 
     Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab()); 
     }  
}); 
+0

¿No se supone que llamar a un método súper para obtener la ficha "hacer clic" como antes? Cuando agrego este código, hace clic, el mouse brilla, pero no muestra la lista Actividad en esta pestaña. –

+0

Disculpe mi error, funciona como una bomba, tenía un código adicional que estaba tomando más control. –

+0

Creo que hay un error en el código ... Aquí debería ser getTabHost en lugar de Tabhost ..... –

19

Si desea ver que se hace clic en una pestaña en particular, es necesario agregar a su oyente a la pestaña en sí, no el TabHost.

La jerarquía de puntos de vista en una implementación pestaña es:

  • TabHost
    • TabWidget
      • (pestaña)
      • (pestaña)
    • FrameLayout

Las fichas se añaden en tiempo de ejecución llamando al: tabHost.addTab(tabHost.newTabSpec(""));

A continuación, puede obtener un identificador para las fichas individuales llamando: getTabWidget().getChildAt(4);

En esencia, se está agregando a su OnClickListener a una hijo del TabWidget. Ahora puede elegir los clics en su pestaña individual. Sin embargo, esto anulará el comportamiento predeterminado que cambia el contenido cuando se hace clic en una pestaña. Por lo tanto, para que su contenido cambie, su OnClickListener deberá hacer eso por usted.

Aquí es un ejemplo completo, que le permite interceptar el evento click, y cambiar el contenido por debajo de la pestaña:

final String myTabTag = "My Tab"; 
final int myTabIndex = 3; 

getTabHost().addTab(getTabHost().newTabSpec(myTabTag)); 

getTabWidget().getChildAt(myTabIndex).setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (getTabHost().getCurrentTabTag().equals(myTabTag)) { 
      getTabHost().setCurrentTab(myTabIndex); 
     } 
    } 
}); 
+0

Muchas gracias funcionó para mí ... :) – praveenb

+0

Esto funcionó para mis propósitos, gracias. – CQM

+0

cuando intento esto, cambia la pestaña pero no el contenido debajo de la pestaña ... ¿alguna sugerencia? –

2

Su cláusula es incorrecto, uso:

...

if (getTabHost().getCurrentTabTag().equals(myTabTag) == false) { 
      getTabHost().setCurrentTab(myTabIndex); 
    } 

...

0

en mi código, t muestra algunos errores y me pide que cree nuevos métodos en nombres como getTabWidget(), getTabHost(), etc. Esperando su respuesta .

probar este

tabHost.getTabHost().setCurrentTab(myTabIndex);