如何在不同的片段中重用Android片段实例?

时间:2012-03-13 19:07:36

标签: android actionbarsherlock

这是我的用例:

我需要使用ActionBar Navigation Tabs创建3个标签,我正在使用ActionBarSherlock来完成此操作。 3个标签中的每一个都是它自己的Fragment。但是,每个选项卡中都会显示一些常见信息(在我的示例中为产品标题,说明)。我为这个常见信息创建了另一个Fragment,并在每个主要的Fragment布局中引用了这个Fragment,比如this

这是我的问题:

我想重用检索并显示公共信息的Fragment实例。我正在使用下面的代码,但似乎总是在每个主要片段中创建一个公共片段的新实例。

    FragmentManager fm = getFragmentManager();
    f = (ProductDetailsInfoFragment) fm.findFragmentByTag("prodinfo");

    if (f == null) {
        Log.d(TAG, "fragment not found...creating new instance");

        f = new ProductDetailsInfoFragment();
        f.setTargetFragment(this, 0);
        fm.beginTransaction().replace(R.id.prod_info_fragment, f, "prodinfo").commit();         
    }

1 个答案:

答案 0 :(得分:2)

如果您愿意,可以共享片段。您需要实现ActionBar.TabListener,并在onTabSelected中选择要使用的片段。

您可以执行以下操作:https://gist.github.com/anonymous/5415274

更好选项是将这两个片段所需的数据存储在您可以在它们之间共享的单独对象中。如果您愿意,这将允许您在没有附加UI的情况下测试检索。这也允许两个片段在需要时发散,使它们成为单一目的,而不必将两个动作所需的所有代码保存在单个片段中。