我有一个 Activity ,它有一个 TabHost,其中包含一组 TabSpec,每个 TabSpec 都有一个包含要由选项卡显示的项目的 ListView 。在创建每个 TabSpec 时,我设置了一个要在选项卡标题中显示的图标。
TabSpecs 是在 setupTabs()
方法中以这种方式创建的,该方法循环创建适当数量的选项卡:
TabSpec ts = mTabs.newTabSpec("tab");
ts.setIndicator("TabTitle", iconResource);
ts.setContent(new TabHost.TabContentFactory(
{
public View createTabContent(String tag)
{
...
}
});
mTabs.addTab(ts);
在某些情况下,我希望能够在程序执行期间更改每个选项卡中显示的图标。目前,我正在删除所有选项卡,并再次调用上述代码重新创建它们。
mTabs.getTabWidget().removeAllViews();
mTabs.clearAllTabs(true);
setupTabs();
有没有办法在不删除和重新创建所有选项卡的情况下替换正在显示的图标?
最佳答案
简短的回答是,您不会错过任何东西。 Android SDK 不提供在创建 TabHost
后更改其指示符的直接方法。 TabSpec
仅用于构建选项卡,因此事后更改 TabSpec
将没有效果。
不过,我认为有一个解决方法。调用 mTabs.getTabWidget()
以获取 TabWidget
对象。这只是 ViewGroup
的子类,因此您可以调用 getChildCount()
和 getChildAt()
来访问 TabWidget 中的各个选项卡
。这些选项卡中的每一个也是一个 View ,对于带有图形指示器和文本标签的选项卡,几乎可以肯定是其他一些 ViewGroup
(可能是 LinearLayout
,但没关系)包含一个 ImageView
和一个 TextView
。因此,稍微摆弄一下调试器或 Log.i
,您应该能够找到获取 ImageView
并直接更改它的方法。
不利的一面是,如果您不小心,选项卡中控件的确切布局可能会发生变化,您的应用可能会崩溃。您最初的解决方案可能更健壮,但同样可能会导致其他不需要的副作用,例如闪烁或焦点问题。
关于java - 更新 Android 选项卡图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36881/