更改Android选项卡上的文本

时间:2010-10-09 20:16:15

标签: android android-tabhost

我有一个在TabHost中有3个标签的Android应用程序(文本标签,没有图像)。我像这样设置标签:

intent = new Intent().setClass(this, AnnouncementsActivity.class);
spec = tabHost.newTabSpec("news").setIndicator("News").setContent(intent);
tabHost.addTab(spec);

我启动了一个后台线程来从我的服务器获取通知,我想更新选项卡上的文本标签,告诉用户有多少新公告。例如,我想将Tab上的文本更改为“News(3)”。如何访问和更改选项卡上的文本标签?

欢迎任何建议!

4 个答案:

答案 0 :(得分:5)

你可以这样做

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 文字

答案 1 :(得分:1)

对于更高版本的android(5.1),这对我有用:

请注意,此示例仅更改第一个标签的文字。调整任意选项卡都不会太难。

FragmentTabHost tabHost = (FragmentTabHost)view.findViewById(android.R.id.tabhost);
AppCompatTextView tv = null;
RelativeLayout parentLayout = (RelativeLayout)tabHost.getTabWidget().getChildAt(0);

for (int i = 0; i < parentLayout.getChildCount(); i++) {

    View tempView = parentLayout.getChildAt(i);

    if (tempView instanceof AppCompatTextView) {
        tv = (AppCompatTextView)tempView;
    }
}

if (tv != null) {
    tv.setText("Your updated text goes here");
}

我所做的就是通过调试器运行它并找出层次结构。我无法使android.R.id.title工作,因为文本视图现在由不同的id引用。无论如何,它现在也是一个AppCompatTextView而不是普通的旧TextView。

同样,这不是最佳的,但是对于更新版本的android,它会获得所需的结果。

希望这有帮助!

答案 2 :(得分:0)

查看代码演示here,在代码末尾看到有获取textView的hacky方法。

答案 3 :(得分:0)

最近我需要更改TabHost的文本,我使用以下代码解决了问题。

请原谅我的英语,我是巴西人,我还在学习。 我希望能帮助那些遇到同样问题的人。

TabHost host = (TabHost)findViewById(R.id.tabDetail);
    host.setup();

    //Tab 1
    TabHost.TabSpec spec = host.newTabSpec("tab1");
    spec.setContent(R.id.tab1);
    spec.setIndicator("Details");
    host.addTab(spec);

    //Tab 2
    spec = host.newTabSpec("tab2");
    spec.setContent(R.id.tab2);
    spec.setIndicator("Comments");
    host.addTab(spec);