2010-09-08 27 views
13

Parece que debería ser simple, pero no puedo encontrar la forma de hacerlo. Necesito una pestaña para tener el texto inicial, pero luego tengo que cambiar el texto después de que el usuario selecciona un elemento de una lista. Sé cómo cambiar la ficha fondos y colores a través de¿Cómo cambiar el texto de la pestaña de Android sobre la marcha?

mTabHost.getChildAt(index).setBackgroundColor(); 

pero no es una opción para cambiar el indicador de la pestaña. He intentado usar 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"); 
} 

que no funcionó bien, junto con algunos otros intentos. ¿Algunas ideas? Gracias de antemano!

Respuesta

7

Wow. De acuerdo, esto fue un dolor. Aparentemente TabWidget hace algo funky con RelativeLayout y cada vez que trato de hacer algo con la solución de Radek-k explotaba con un error RelativeLayout. Entonces, básicamente, el trabajo es el siguiente. También le permite cambiar el tipo de letra, tamaño de fuente, color de fuente, etc.

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

o en una línea ...

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

donde "textIndex" es el índice del campo de texto. En este caso, es 1. Si la pestaña tiene un ícono o modificaciones personalizadas, el índice podría cambiar.

Gracias de nuevo a radek-k. Definitivamente me hiciste apuntar en la dirección correcta.

+0

Si está utilizando la 'TabActivity' estándar, puede usar' findViewById (android.R.id.title) 'en lugar de' getChildAt (textIndex) 'como en [esta respuesta] (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

yo era capaz de jugar con eso un poco la noche anterior, pero sigue soplando en mí. ¿Tienes eso para trabajar? Voy a experimentar con esto un poco más hoy, pero si tienes un poco más de conocimiento sería genial. Gracias de nuevo. – Honeal

5

Puede hacerlo sin conocer el índice de la magia de la TextView utilizando findViewById:

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

Usted puede hacerlo de esta manera

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

donde se genera Sistema android.R.id.title, sólo cambia childIndex y Texto según su necesidad

2

tratan de esta manera más fácil de lo que funciona para mí:

tabLayout.getTabAt(index).setText("TabName"); 
Cuestiones relacionadas