2010-09-08 11 views
13

Cela semble être simple, mais je n'arrive pas à trouver un moyen de le faire. J'ai besoin d'un onglet pour avoir du texte de début, mais ce texte change après que l'utilisateur sélectionne un élément d'une liste. Je sais comment changer les arrière-plans des onglets et les couleurs viaComment changer le texte de l'onglet Android à la volée?

mTabHost.getChildAt(index).setBackgroundColor(); 

mais il n'y a pas d'option pour changer l'indicateur de l'onglet. J'ai essayé d'utiliser un EditText.

private EditText tabName; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.statistics); 

    comm = new Communicator(); 

    tabName = new EditText(this); 
    tabName.setText("BeginningText"); 

    mTabHost = getTabHost(); 
    mTabHost.addTab(mTabHost 
        .newTabSpec("tab_1_stat") 
        .setIndicator(User) 
        .setContent(R.id.meStatsTab)); 
    mTabHost.addTab(mTabHost 
        .newTabSpec("tab_2_stat") 
        .setIndicator(tabName.getText()) 
        .setContent(R.id.themStatsTab)); 
    mTabHost.addTab(mTabHost 
        .newTabSpec("tab_3_stat") 
        .setIndicator("Archive") 
        .setContent(R.id.archiveStatsTab)); 
    mTabHost.setOnTabChangedListener(this); 
    getTabWidget().getChildAt(1).setOnClickListener(new onThemTabClicked()); 
    mTabHost.setCurrentTab(0); 

    onTabChanged("tab_1_stat"); 

}

.....

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    tabName.setText("ChangedTabText"); 
    Bundle extras = intent.getExtras(); 
    themStats = extras.getStringArray("themStats"); 
    mTabHost.setCurrentTab(1); 
    onTabChanged("tab_2_stat"); 
} 

Cela ne fonctionne pas non plus, ainsi que quelques autres tentatives. Des idées? Merci d'avance!

Répondre

7

Wow. D'accord, c'était une douleur. Apparemment TabWidget fait quelque chose de funky avec RelativeLayout et chaque fois que j'essayais de faire quelque chose avec la solution de radek-k, ça explosait avec une erreur RelativeLayout. Donc, fondamentalement, le travail est le suivant. Il vous permet également de changer la police, taille de police, couleur de police, etc.

TabWidget vTabs = getTabWidget(); 
RelativeLayout rLayout = (RelativeLayout) vTabs.getChildAt(tabIndex); 
((TextView) rLayout.getChildAt(textIndex)).setText("NewTabText"); 

ou dans une ligne ...

((TextView)((RelativeLayout)getTabWidget().getChildAt(tabIndex)).getChildAt(textIndex)).setText("NewTabText"); 

où « textIndex » est l'indice du champ de texte. Dans ce cas, il s'agit de 1. Si l'onglet comporte une icône ou des modifications personnalisées, l'index peut changer.

Merci encore à radek-k. Vous m'avez définitivement pointé dans la bonne direction.

+0

Si vous utilisez le 'TabActivity' standard, vous pouvez utiliser' findViewById (android.R.id.title) 'à la place de' getChildAt (textIndex) 'comme dans [cette réponse] (http://stackoverflow.com/A/5577979/165674). –

2
TabWidget vTabs = .....; 

// get desired tab view 
View vTab = vTabs.getChildAt(i); 

// I guess vTab is instance of TextView 
TextView vText = (TextView) vTab; 

vText.setText(...); 
+0

j'ai pu jouer avec cela un peu hier soir, mais il est toujours sauter sur moi. Avez-vous ça pour travailler? Je vais l'expérimenter un peu plus aujourd'hui, mais si vous avez un peu plus de perspicacité ce serait génial. Merci encore. – Honeal

5

Vous pouvez le faire sans connaître l'indice magique du TextView en utilisant findViewById:

TabWidget vTabs = getTabWidget(); 
View indicatorView = vTabs.getChildAt(tabIndex); 
((TextView) indicatorView.findViewById(android.R.id.title)).setText("NewTabText"); 
0

Vous pouvez le faire comme ça

TabHost tabHost = getTabHost(); 
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title); 
tv.setText("New Tab Text"); 

android.R.id.title est généré par le système, il suffit de changer childIndex et Texte selon votre besoin

2

essayer cette façon la plus simple qui fonctionne pour moi:

tabLayout.getTabAt(index).setText("TabName"); 
Questions connexes