使用选项卡在上下文中调用片段onCreateView

时间:2013-04-22 17:01:32

标签: android tabs android-fragments

我有2个标签和2个相应的片段。在调用LAUNCH Activity时,两个选项卡都被添加,然后将显示添加的第一个选项卡。因此,第一个片段onCreateView被称为第二个片段而不是 在我的情况下,这是一个问题,因为第一个片段必须调用第二个片段上的方法。在第二个Fragment中有一个Objectreference,它将通过调用第二个Fragment中的onCreateView来设置。 因此,我使用以下代码片段来解决此问题

actionBar.setSelectedNavigationItem(1);
actionBar.setSelectedNavigationItem(0);

它有效,但在我看来,必须有另一种可能性来解决这个问题。就像调用第二个片段的onCreateView一样?

以下是相关的代码段。监听器在android-dev Sample中实现,只有少量更改不会影响我的问题。

simplexFragment对应于第一个片段
graphicFragment对应于第二个片段

// adds two tabs
actionBar.addTab(actionBar.newTab().setText("Input").setTabListener(new TabListener(null,  "input_fragment")));

graphicFragment = new GraphicFragment();

actionBar.addTab(actionBar.newTab().setText("Graphic").setTabListener(new TabListener(graphicFragment, "graphic_fragment")));
simplexFragment.setGraphics(graphicFragment); // sets the internal reference!

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

// selects the Tab so the GraphicFragments onCreateView will be called
actionBar.setSelectedNavigationItem(1);
actionBar.setSelectedNavigationItem(0);

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

  

在我的情况下,这是一个问题,因为第一个片段必须在第二个片段上调用方法。

这不是Fragments的工作方式。我的想法是Fragment应该是自包含且可重复使用的,并且Fragment不应该知道另一个存在(或者至少不应该依赖于存在任何其他Fragment

例如,假设您有3 Fragments,ActivityA使用FragmentA和FragmentB,但您有另一个Activity(ActivityB)使用FragmentA和FragmentC。在这种情况下,FragmentA不知道另一个Fragment是什么(B或C),甚至不应该期望还有另一个Fragment

实现所需目标的方法是在Activity上使用回调方法,并让它对任何其他Fragments执行操作(如果存在)。它可以通过调用另一个Fragments上的公共方法,或者在创建另一个Bundle时在'参数'Fragments中传递数据来实现此目的。