我正在尝试通过创建一个使用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
我真的很茫然,到处搜寻。我非常感谢任何人的建议。谢谢你的时间。
答案 0 :(得分: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);
,这是像素完美虚拟视图:
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);
......一切正常,
答案 1 :(得分:0)
尝试删除标签,并在更改文本后将其重新添加到所需的索引处。 (这是一个错误。添加后设置文本时,关联的视图不会更新。)