Как изменить текст вкладки Android на лету?

Кажется, это должно быть просто, но я не могу понять, как это сделать. Мне нужно, чтобы вкладка начиналась с текста, но после этого текст меняется после того, как пользователь выбирает элемент из списка. Я знаю, как менять фон и цвета вкладки

mTabHost.getChildAt(index).setBackgroundColor(); 

Но нет возможности изменить индикатор вкладки. Я попытался использовать 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"); } 

Это тоже не сработало, а также несколько других попыток. Есть идеи? Спасибо заранее!

Solutions Collecting From Web of "Как изменить текст вкладки Android на лету?"

Вау. Ладно, это была боль. Очевидно, TabWidget делает что-то напуганное с RelativeLayout, и каждый раз, когда я пытался что-либо сделать с решением radek-k, он взорвался ошибкой RelativeLayout. Таким образом, в основном работа заключается в следующем. Он также позволяет изменять шрифт, размер шрифта, цвет шрифта и т. Д.

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

Или в одной строке …

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

Где «textIndex» – это индекс текстового поля. В этом случае это 1. Если вкладка имеет значок или пользовательские изменения, индекс может измениться.

Еще раз спасибо radek-k. Вы определенно заставили меня указывать в правильном направлении.

Вы можете сделать это, не зная волшебного индекса TextView с помощью findViewById :

 TabWidget vTabs = getTabWidget(); View indicatorView = vTabs.getChildAt(tabIndex); ((TextView) indicatorView.findViewById(android.R.id.title)).setText("NewTabText"); 
 TabWidget vTabs = .....; // get desired tab view View vTab = vTabs.getChildAt(i); // I guess vTab is instance of TextView TextView vText = (TextView) vTab; vText.setText(...); 

Вы можете сделать это так

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

Где android.R.id.title – это сгенерированная система, просто измените ChildIndex и Text в соответствии с вашими потребностями

Попробуйте этот самый простой способ, который работает для меня:

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