【问题标题】:Call Fragments onCreateView in context with Tabs在使用选项卡的上下文中调用 Fragments onCreateView
【发布时间】:2013-04-23 01:43:15
【问题描述】:

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

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

它有效,但我认为必须有另一种可能性来解决这个问题。比如调用第二个Fragment的onCreateView?

这里是相关代码sn-p。监听器的实现方式与 android-dev 示例一样,只有很小的更改不会影响我的问题。

simplexFragment 对应第一个Fragment
graphicFragment对应第二个Fragment

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

感谢支持。

【问题讨论】:

    标签: android tabs android-fragments


    【解决方案1】:

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

    这不是Fragments 的工作方式。这个想法是 Fragment 应该是独立的和可重复使用的,一个 Fragment 不应该知道另一个存在(或者至少不应该依赖任何其他 Fragment 的存在)。

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

    实现您想要的方法是在Activity 上使用回调方法,并让它在任何其他Fragments 上执行操作(如果它们存在)。它可以通过调用另一个 Fragments 上的公共方法或在创建另一个 Fragments 时在“参数”Bundle 中传递数据来做到这一点。

    【讨论】:

    • 我使用 Fragments 是因为我想为平板电脑和手机构建 UI。这更像是一个历史性的问题 - 首先我使用回调方法,但是在实现选项卡时,两个片段(包含在每个选项卡中)之间的同步存在问题,我不得不从片段 A--> B 中进行引用. OT:作为 Fragments 等模式和有趣概念的粉丝,我不得不以这种方式使用这个概念真的很痛苦......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多