Java 以编程方式切换操作栏选项卡-如何附加参数?
我正在切换Android(Sherlock)操作栏选项卡,如中所述。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
是否有任何方法将参数传递给被调用的选项卡 期待中的感谢
@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吗?