Android ActionBar:动态显示/隐藏标签?

时间:2013-04-30 11:36:31

标签: android android-actionbar actionbarsherlock android-tabs

是否可以动态删除/恢复操作栏中的标签栏?

到目前为止,我通过更改操作栏的导航模式来完成此操作。我使用以下代码删除并恢复标签栏:

@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标签。

3 个答案:

答案 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中的控件。