2009-06-30 5 views
8

Salutations,OnClickListener sur les onglets ne fonctionne pas

Je suis en train d'obtenir Click - événement en cliquant sur l'onglet sélectionné de mon TabActivity. OnTabChangedHandler n'est appelé que lorsque l'onglet est modifié, et non si l'onglet actuellement actif est cliqué. Le débogueur me dit que j'ai le onClickListener enregistré pour le TabWidget dans mon TabHost.

Est-ce que je m'inscris au mauvais affichage?

De même, je ne parviens pas à créer un menu contextuel pour les onglets, uniquement pour son contenu, est-ce lié à ce problème?

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"); 
    } 

Répondre

10

utilisation setOnTabChangedListener au lieu 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

Vous n'êtes pas censé appeler un super méthode pour obtenir l'onglet « cliquable » comme avant? Lorsque j'ajoute ce code, il clique, la souris brille, mais elle n'affiche pas listActivity sur cet onglet. –

+0

Désolé mon erreur, fonctionne comme une bombe, j'ai eu le code supplémentaire qui prenait en charge plus bas. –

+0

Je pense qu'il y a une erreur dans le code ... Ici, il devrait être getTabHost au lieu de Tabhost ..... –

19

Si vous voulez voir qu'un onglet particulier est cliqué, vous devez ajouter votre auditeur à l'onglet lui-même, pas le TabHost.

La hiérarchie des vues dans une implémentation onglet est:

  • TabHost
    • TabWidget
      • (onglet)
      • (onglet)
    • FrameLayout

Les onglets sont ajoutés lors de l'exécution en appelant: tabHost.addTab(tabHost.newTabSpec(""));

Vous pouvez alors obtenir une poignée sur les onglets en appelant: getTabWidget().getChildAt(4);

Essentiellement, vous ajoutez votre OnClickListener à un enfant du TabWidget. Vous pouvez maintenant prendre les clics sur votre onglet individuel. Cependant, cela va remplacer le comportement par défaut qui change le contenu quand on clique sur un onglet. Donc, pour que votre contenu change, votre OnClickListener devra le faire pour vous.

Voici un exemple complet, qui vous permet d'intercepter l'événement de clic et de modifier le contenu sous l'onglet:

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

Merci beaucoup mush cela a fonctionné pour moi ... :) – praveenb

+0

Cela a fonctionné pour mes fins, merci. – CQM

+0

quand j'essaye cela cela change l'onglet mais pas le contenu sous l'onglet ... des suggestions? –

2

Votre article est erroné, utilisez:

...

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

...

0

dans mon code, je t montre quelques erreurs et me demande de créer de nouvelles méthodes dans ces noms comme getTabWidget(), getTabHost(), etc. En attente de votre réponse .

Essayez cette

tabHost.getTabHost().setCurrentTab(myTabIndex); 
Questions connexes