如何动态更改android标签文本?

Hon*_*eal 15 tabs android android-widget

这看起来应该很简单,但我无法想出办法.我需要一个选项卡来开始文本,但是在用户从列表中选择一个项目后,该文本会发生变化.我知道如何通过改变标签背景和颜色

mTabHost.getChildAt(index).setBackgroundColor();
Run Code Online (Sandbox Code Playgroud)

但是没有选项可以更改选项卡的指示器.我尝试过使用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");
Run Code Online (Sandbox Code Playgroud)

}

.....

@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");
}
Run Code Online (Sandbox Code Playgroud)

这也不起作用,还有其他一些尝试.有任何想法吗?提前谢谢!

Hon*_*eal 8

哇.好的,这是一种痛苦.显然,TabWidget使用RelativeLayout做了一些时髦的事情,每当我尝试用radek-k的解决方案做任何事情时,它都会因为RelativeLayout错误而爆炸.所以基本上解决了以下问题.它还允许您更改字体,字体大小,字体颜色等.

TabWidget vTabs = getTabWidget();
RelativeLayout rLayout = (RelativeLayout) vTabs.getChildAt(tabIndex);
((TextView) rLayout.getChildAt(textIndex)).setText("NewTabText");
Run Code Online (Sandbox Code Playgroud)

或者在一行......

((TextView)((RelativeLayout)getTabWidget().getChildAt(tabIndex)).getChildAt(textIndex)).setText("NewTabText");
Run Code Online (Sandbox Code Playgroud)

其中"textIndex"是文本字段的索引.在这种情况下,它是1.如果选项卡有图标或自定义修改,索引可能会更改.

再次感谢radek-k.你肯定让我指出了正确的方向.


Aja*_*try 8

尝试这种最适合我的方式:

tabLayout.getTabAt(index).setText("TabName");
Run Code Online (Sandbox Code Playgroud)


DMa*_*Man 5

您可以在不知道使用的魔术索引的情况下执行此TextView操作findViewById:

TabWidget vTabs = getTabWidget();
View indicatorView = vTabs.getChildAt(tabIndex);
((TextView) indicatorView.findViewById(android.R.id.title)).setText("NewTabText");
Run Code Online (Sandbox Code Playgroud)