是否可以动态删除/恢复操作栏中的标签栏?
到目前为止,我通过更改操作栏的导航模式来完成此操作。我使用以下代码删除并恢复标签栏:
@Override
public void restoreTabs() {
getSupportActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
this.supportInvalidateOptionsMenu();
}
@Override
public void removeTabs() {
getSupportActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
this.supportInvalidateOptionsMenu();
}
虽然有效,但存在一个很大的问题:每当我拨打setNavigationMode
时,onTabSelected
都会调用TabListener
,并重新创建当前的opend标签。
答案 0 :(得分:4)
要动态删除操作栏标签,您只需:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
要动态添加它们,只需执行以下操作:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
对于第二种情况,假设在设置导航模式后,您还将向操作栏添加选项卡,类似于:
for (int resourceId : tabs) {
actionBar.addTab(actionBar.newTab().setText(resourceId)
.setTabListener(this));
}
答案 1 :(得分:3)
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
invalidateOptionsMenu();
}
答案 2 :(得分:1)
这是按预期工作的,因为正在选择选项卡,因为它没有出现。 我建议你自己使用TabListener中的控件。