我应该在fragment.newInstance()中使用findFragmentByTag吗?

时间:2015-02-03 15:59:50

标签: android android-fragments

我一直在使用静态方法newInstance创建片段后,在SO上阅读了大量的建议(最值得注意的是,here)。在此之前,我一直在构造函数中放置变量(坏)并使用'findFragmentByTag'检查片段是否存在,并重用该片段(如果存在)。

我的问题......如果我使用myFragment.newInstance()获取我的片段,或者我应该创建新实例并让垃圾收集器处理前一个实例,我是否还应该使用'findFragmentByTag'? / p>

如果我应该使用findFragmentByTag,那么确保重用片段获取更新参数的最佳方法是什么。

示例:

String test;

test = "hello";
launchNewFragment();

// User hits back, does something else, then goes back to that fragment
// in this call, how can I ensure the reused fragment is getting the new value of 'test'?
test = "world";
launchNewFragment();

private void launchNewFragment() {
    Fragment f = getSupportFragmentManager.findFragmentByTag("myFragment");

    if (f == null) {
        f = myFragment.newInstance(test);
    }

    getSupportFragmentManager().beginTransaction().replace(R.id.myContainer, f, "myFragment").addToBackStack(null).commit();
}

全部谢谢

1 个答案:

答案 0 :(得分:0)

如果你可以使用findFragmentByTag找到你的片段,那么GC不会有太多帮助,因为它仍然会在内存中。此外,如果您还原片段,则无需再次调用beginTransaction。在if子句中移动它。

我假设您在活动中执行此操作,因此另一个选项是将布局放在布局中,如下所示:

<fragment name="your.package.MyFragment" />

那说我们需要更多关于你如何使用片段的细节。