创建 Honeycomb 操作栏选项卡后更改选项卡文本

Posted

技术标签:

【中文标题】创建 Honeycomb 操作栏选项卡后更改选项卡文本【英文标题】:Changing tab text in a Honeycomb Action Bar tab after it has been created 【发布时间】:2011-08-13 10:56:39 【问题描述】:

我正在尝试通过创建一个使用操作栏和选项卡的简单文本编辑应用程序来使用 android Honeycomb。我遇到了一个烦人的问题。在创建选项卡并将其添加到操作栏后,我想更改选项卡上显示的文本。我认为使用以下方法, ActionBar.Tab.setText(CharSequence arg0) 可以解决问题,但是,它似乎并没有改变可视文本。更奇怪的是,如果我调用 getText() 它会返回我将选项卡更改为的文本。下面是我用来更改标签文本的 sn-p 代码:

int currentTabIndex = ab.getSelectedNavigationIndex();
currentTabTitle = (String) ab.getTabAt(currentTabIndex).getText();  // just to check
ab.getTabAt(currentTabIndex).setText(fileName);                     // change tab text
currentTabTitle = (String) ab.getTabAt(currentTabIndex).getText();  // just to check

我真的很茫然,到处找。我将不胜感激任何人的任何建议。感谢您的宝贵时间。

【问题讨论】:

互联网搜索者,请为这个问题投票:code.google.com/p/android/issues/… 【参考方案1】:

这是一个愚蠢的问题,添加和删除选项卡是一个坏主意,因为如果您使用片段,您最终将使用其选项卡删除和重新添加片段。使用自定义视图似乎效果更好,并且额外的好处是为您提供更大的自定义。

以下是如何使用与默认视图相同的自定义视图制作选项卡:

ActionBar bar = getActionBar();

TabListener tabListener = new TabListener() 

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) 
        // TODO Auto-generated method stub

    

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) 
        // TODO Auto-generated method stub

    

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) 
        // TODO Auto-generated method stub

    
;

Tab tab1 = bar.newTab()
          .setText("Info")
          .setTabListener(tabListener)
          .setCustomView(makeTabDummy("Info", android.R.drawable.ic_menu_info_details));

bar.addTab(tab1);

这是像素完美的虚拟视图:

private TextView makeTabDummy(String text, int icon) 

    TextView tv = new TextView(this);
    tv.setText(text);
    tv.setTextColor(0xffffffff);
    tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
    tv.setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0);
    tv.setGravity(Gravity.CENTER);

    return tv;

从这里我们可以毫无问题地更改选项卡上的图标和文本。示例:

TextView tv = (TextView) tab1.getCustomView();          
tv.setText("change the text!");
tv.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.btn_star_big_on, 0, 0, 0);

...一切正常

【讨论】:

我在兼容性包(Api 18)中更改方向后看到此问题,因此将使用此解决方案。【参考方案2】:

尝试删除标签并在更改文本后将其重新添加到所需的索引处。 (这是一个bug。添加后设置文本时,关联的视图不会更新。)

【讨论】:

感谢您提供的信息!我稍后会试试这个。希望他们能尽快在更新中解决这个问题。 "Soon" 是相对的,但是是的,我会修复它。 ;)

以上是关于创建 Honeycomb 操作栏选项卡后更改选项卡文本的主要内容,如果未能解决你的问题,请参考以下文章

更改选项卡后,从链接禁用引导程序打开选项卡

在选项卡式应用程序中更改选项卡后运动功能不起作用

仅在键盘选项卡后获取焦点元素

操作栏标签片段中的片段?

如何通过单击选项卡来更改操作栏菜单按钮

Ionic 2:添加新的动态选项卡后刷新选项卡视图