3

我正在切换我的 Android (Sherlock) 操作栏选项卡,如以下问题所述:Programmatically switch tabs in Android using ActionBarSherlock
有没有办法将参数传递给被调用的选项卡?

感谢期待!


@semperfly 要求的更多信息:

我的 MainActivity 有一个 ActionBar 并实现了 ActionBar.TabListener

    actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    tabCalculate = actionBar.newTab();
    tabCalculate.setText("Calculate");
    tabCalculate.setTabListener(this);
    actionBar.addTab(tabCalculate);

    tabArchive = actionBar.newTab();
    tabArchive.setText("Archive");
    tabArchive.setTabListener(this);
    actionBar.addTab(tabArchive);

这是 ActionBar.TabListener 的实现:

public void onTabSelected(Tab tab, android.support.v4.app.FragmentTransaction ft) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    SherlockFragment fragment = null;
    if( tabCalculate.equals(tab) ) {
        if( fragmentInput == null ) {
            fragmentInput = new FragmentInput();                
        }            
        fragment = fragmentInput;
    } else if ( tabArchive.equals(tab)) {
        if( fragmentArchive == null ) {
            fragmentArchive = new FragmentArchive();
        }
        fragment = new FragmentArchive();
    }
    fragmentTransaction.replace(R.id.fragmentsContainer, fragment);

    fragmentTransaction.commit();
}    

public void onTabUnselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {

}

public void onTabReselected(Tab tab, android.support.v4.app.FragmentTransaction ft) {

}  

我的第一种方法是以这种方式从 ArchiveFragment 加载 InputFragment:

                FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

            SherlockFragment fragment = new FragmentInput();
            Bundle arguments = new Bundle();
            arguments.putSerializable(FragmentInput.ARG_INPUTDATA_TO_LOAD, inputData);
            fragment.setArguments(arguments);
            fragmentTransaction.replace(R.id.fragmentsContainer, fragment);

            fragmentTransaction.commit();

这工作得非常好,但没有相应地切换 ActionBar 中的活动选项卡指示器,存档选项卡下方的蓝线处于活动状态,尽管输入片段处于活动状态。

然后我尝试了这种方法来切换标签/片段:

getSherlockActivity().getSupportActionBar().setSelectedNavigationItem(0);

这可行,但现在我无法将参数传递给要激活的选项卡。

4

2 回答 2

13

晚了,但你可以使用:

getActivity().getActionBar().setSelectedNavigationItem(1); //where 1 equals the 2nd tab
于 2013-07-29T18:58:03.510 回答
0

似乎这可能是我的问题 Fragments - Creating event callbacks to the Activity的答案

于 2012-10-24T20:40:44.907 回答