我有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);
感谢您的支持。
答案 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
中传递数据来实现此目的。