我一直在使用静态方法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();
}
全部谢谢
答案 0 :(得分:0)
如果你可以使用findFragmentByTag找到你的片段,那么GC不会有太多帮助,因为它仍然会在内存中。此外,如果您还原片段,则无需再次调用beginTransaction
。在if子句中移动它。
我假设您在活动中执行此操作,因此另一个选项是将布局放在布局中,如下所示:
<fragment name="your.package.MyFragment" />
那说我们需要更多关于你如何使用片段的细节。