这是我的用例:

我需要使用ActionBar Navigation Tabs创建3个选项卡,而我正在使用ActionBarSherlock完成此操作。 3个选项卡中的每个选项卡都是其自己的Fragment。但是,每个选项卡中都有一些常用信息(在我的情况下,产品标题,说明)。我为此通用信息创建了另一个Fragment,并在每个主要Fragment布局(例如this)中都引用了该Fragment。

这是我的问题:

我想重用获取和显示公共(public)信息的Fragment实例。我正在使用下面的代码,但是它似乎总是在每个主要 fragment 中创建一个公共(public) 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 。您将需要实现ActionBar.TabListener,并在onTabSelected中选择要使用的 fragment 。

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

更好的选项是将这两个 fragment 所需的数据存储在一个可以在它们之间共享的单独对象中。如果需要,这将允许您测试检索而无需附加UI。这也使两个 fragment 可以按需要分散,使它们成为一个单一目的的东西,而不必将两个 Action 所需的所有代码都保存在一个 fragment 中。

10-07 19:12
查看更多