【问题标题】:Android ActionBar: show/hide tabs dynamically?Android ActionBar:动态显示/隐藏标签?
【发布时间】:2013-04-30 11:36:30
【问题描述】:
是否可以从操作栏中动态删除/恢复标签栏?
到目前为止,我通过更改操作栏的导航模式来做到这一点。我使用以下代码删除和恢复标签栏:
@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 中调用,并且当前打开的选项卡会重新创建。
【问题讨论】:
标签:
android
android-actionbar
actionbarsherlock
android-tabs
【解决方案1】:
要动态删除操作栏标签,您只需要:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
要即时添加它们,只需执行以下操作:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
对于第二种情况,假设在设置导航模式后,你还会在操作栏中添加选项卡,类似这样:
for (int resourceId : tabs) {
actionBar.addTab(actionBar.newTab().setText(resourceId)
.setTabListener(this));
}
【解决方案2】:
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();
}
【解决方案3】:
这是按预期工作的,因为选项卡被选中是因为它没有出现。
我建议你自己做 TabListener 中的控件。