Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式切换操作栏选项卡-如何附加参数?_Java_Android_Android Actionbar_Actionbarsherlock - Fatal编程技术网

Java 以编程方式切换操作栏选项卡-如何附加参数?

Java 以编程方式切换操作栏选项卡-如何附加参数?,java,android,android-actionbar,actionbarsherlock,Java,Android,Android Actionbar,Actionbarsherlock,我正在切换Android(Sherlock)操作栏选项卡,如中所述。 是否有任何方法将参数传递给被调用的选项卡 期待中的感谢 @semperfly要求的进一步信息: 我的MainActivity有一个ActionBar并实现ActionBar.TabListener actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); tabCalc

我正在切换Android(Sherlock)操作栏选项卡,如中所述。
是否有任何方法将参数传递给被调用的选项卡

期待中的感谢


@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);

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

似乎这就是我问题的答案

很晚,但您可以使用:

getActivity().getActionBar().setSelectedNavigationItem(1); //where 1 equals the 2nd tab

为什么要将参数传递给所选选项卡?如果我没弄错的话,您可以在某个选项卡上调用.select()。@user1597833,因为另一个选项卡重复使用了源选项卡中的信息。将“源”选项卡想象为一个存档,当单击这样一个存档项目时,它将加载到“输入和编辑”选项卡中,以便重新编辑。因此,我必须将旧项目或其id传递给“输入和编辑”选项卡。您可以为每个选项卡分配不同的视图,每个视图可以包含“imageview”或其他视图,并且您可以随时实际更改视图属性。我的选项卡已经是片段。但我没有参考档案片段中的“输入和编辑”片段。。。(顺便说一句:很抱歉这么愚蠢-我是android新手…)通常的方法是在ontAbsSelected()中处理它,当您调用setSelectedNavigationItem()时应该调用它。或者在活动中实现的片段中创建一个接口,以便片段可以在附加时请求参数。您可以将参数传递给片段,但请记住也要为片段创建一个公共空构造函数。当我通过以下代码切换选项卡时:“getSherlockActivity().getSupportActionBar().setSelectedNavigationItem(0);“我担心这对我没有帮助。我正在使用此方法切换到另一个选项卡,但我认为这会在所选选项卡上重新创建视图,并且对我来说,该视图为空。所以我得到了一个空指针异常。有没有一个地方可以让我看到这到底在做什么?我正在使用fragmenttransaction.replace。您能提供stacktrace吗?