我该如何在不同的碎片中重用Android碎片实例?

5

这是我的使用案例:

我需要使用 ActionBar Navigation Tabs创建3个选项卡,并使用 ActionBarSherlock来完成此操作。每个选项卡都是一个 Fragment。但是,每个选项卡中都显示了一些共同的信息(在我的情况下,产品标题、描述)。我已经为这些共同的信息创建了另一个Fragment,并在每个主Fragment布局中引用了这个Fragment,如this

这是我的问题:

我想重用检索和显示公共信息的Fragment实例。我正在使用下面的代码,但它似乎总是在每个主Fragment中创建一个新的公共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();         
    }

您不能重复使用同一个 Fragment 实例,必须创建一个新的实例来在另一个 Fragment 中使用。 - Marcio Covre
唉,这就是我担心的。我想我将不得不在片段中添加一些缓存逻辑,以便不会多次检索数据。 - Sanjeev
1个回答

2
如果您想要共享片段,您需要实现ActionBar.TabListener,在onTabSelected中选择要使用的片段即可。您可以像这样做:https://gist.github.com/anonymous/5415274 更好的选择是将这两个片段所需的数据存储在一个单独的对象中,并在它们之间共享。这将允许您测试检索而无需连接UI。这还允许两个片段按照需要分开,使它们成为单一目的事物,而不必将所有需要的代码保留在一个片段中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接