我有一个在TabHost中有3个标签的Android应用程序(文本标签,没有图像)。我像这样设置标签:
intent = new Intent().setClass(this, AnnouncementsActivity.class);
spec = tabHost.newTabSpec("news").setIndicator("News").setContent(intent);
tabHost.addTab(spec);
我启动了一个后台线程来从我的服务器获取通知,我想更新选项卡上的文本标签,告诉用户有多少新公告。例如,我想将Tab上的文本更改为“News(3)”。如何访问和更改选项卡上的文本标签?
欢迎任何建议!
答案 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);