java - 更新 Android 选项卡图标

标签 java android android-tabhost

我有一个 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/

相关文章:

java.lang.ClassNotFoundException : org. glassfish.jersey.server.internal.inject.ExtractorException

java - jps进程是JVM进程吗?

java - 使用 JFreeChart 创建正态分布图

java - Android 定时器的处理程序和可运行对象

android - 来自默认视频播放器的插页式广告 onBackPressed

安卓。如何更改选项卡内的 Activity

android - 没有 TabActivity、ActivityGroup 或 LocalActivityManager 的 TabHost

java - 是否可以在 Hibernate 的同一个项目中同时使用注释和 hbm.xml 文件?

android - 使 AppBarLayout/CollapsingToolbarLayout 对 ViewPager 中的 RecyclerView 中的滚动使用react

android - 在xml文件中添加标签栏