ActionBarSherlock - 通过单击其他选项卡选择选项卡

时间:2012-11-10 19:58:05

标签: android actionbarsherlock

我有一个包含3个标签和一个按钮的示例。

public class MainActivity extends SherlockActivity implements TabListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    setContentView(R.layout.activity_main);
    addTab("1", 0, false);
    addTab("2", 1, false);
    addTab("3", 2, false);
    Button cmdClick = (Button) findViewById(R.id.cmdClick);
    cmdClick.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            getSupportActionBar().setSelectedNavigationItem(0);             
        }
    });

}

private void addTab(String tabTitle, int position, boolean setSelected) {
    ActionBar.Tab tab = getSupportActionBar().newTab();
    tab.setText(tabTitle);
    tab.setTabListener(this);
    getSupportActionBar().addTab(tab, position, setSelected);
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    Log.d("example", "Selected " + tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    Log.d("example", "Unselected " + tab.getPosition());
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    Log.d("example", "Reselected " + tab.getPosition());
}

}

当我点击按钮时,它会自动选择第一个标签。每当我点击第二个或第三个选项卡时,我想自动选择第一个选项卡。我试过这个

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    Log.d("example", "Selected " + tab.getPosition());
    getSupportActionBar().setSelectedNavigationItem(0);
}

但它不起作用。有什么想法吗?

感谢。

编辑:

也许这个例子没有任何意义,但这只是我想要做的一个简化的例子。我想默认有两个标签,一个标题为“1”,第二个标题为“+”。当用户选择“+”标签时,我想创建标题为“2”的新标签(标签“1”和“+”之间)并自动选择标签“2”。

1 个答案:

答案 0 :(得分:0)

首先,我想劝阻这种行为。这对您的用户来说非常困惑,坦率地说没有任何意义。

那就是说我试图破解它但似乎并不容易做到这一点。我做了以下事情:

public void onTabSelected(Tab tab, FragmentTransaction ft) {
            if(tab.getPosition() == 0) {
                int tabs = mActivity.getSupportActionBar().getTabCount();
                if(tabs > 3) {
                    ActionBar.Tab test = mActivity.getSupportActionBar().getTabAt(2);
                    test.select();
                    return;
                }
            }

修改

对于您描述的行为,我认为通过创建自己的标签来实现它会容易得多。您可以使用单选按钮和/或按钮轻松实现它。

现在这会导致选项卡指示器仍然指向旧选项卡但内部的片段更新为选定的一个= /所以不完全...