在创建Honeycomb Action Bar选项卡后更改选项卡文本

Dee*_*eek 5 tabs android settext android-3.0-honeycomb android-actionbar

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

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
Run Code Online (Sandbox Code Playgroud)

我真的很茫然,到处搜寻.我非常感谢任何人的建议.谢谢你的时间.

cko*_*ozl 10

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

以下是如何使用自定义视图创建一个选项卡,其外观和行为与默认视图相同:

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);
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

从这里我们可以更改选项卡上的图标和文本,而不会有任何问题.例:

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

......一切都按预期工作

  • 这是一个非常好的答案!它应该被接受 (2认同)

ada*_*amp 0

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

  • “很快”是相对的,但是是的,我会解决它。;) (2认同)