我正在ViewPager中创建一个使用大量片段的应用程序。
到目前为止,我总是向ViewPager提供所需的每个片段的新实例,因为谷歌开发者的所有示例似乎都说,这是正确的事情。
这些片段使用其父Activity来检索其状态/数据并在OnCreateView中自行更新。
其中一个新片段是一个NewsFragment,其中包含NewsHeadersFragment或NewsArticleFragment,这两者需要进行通信。
我所做的是将来自NewsHeaderFragment的消息article_clicked(文章)发送到我的Activity(不幸的是我还没有找到与父片段通信的方式),并且Activity向NewsFragment发送消息以更改其子片段< / p>
为了做到这一点,我似乎必须保留对NewsFragment的引用,所以我想也许我不应该总是创建一个新的片段实例。
我的问题是,最好总是创建一个新的NewsFragment实例并只更新引用,或者只在引用为null时创建一个实例并始终返回引用。
即。这是更好的:
private static NewsFragment _news;
public static NewsFragment get_news_fragment() {
_news = NewsFragment.NewInstance();
return _news;
}
还是这个?
private static NewsFragment _news;
public static NewsFragment get_news_fragment() {
if (_news == null) _news = NewsFragment.NewInstance();
return _news;
}
提前感谢您提供的任何帮助
答案 0 :(得分:1)
我建议在需要时始终创建片段(如谷歌开发者样本中所做的那样),这是防止潜在OutOfMemoryException
的一个重要原因。在其生命周期之外对片段/活动进行硬性引用会使垃圾收集难以辨认,并为臭名昭着的OOM铺平道路。
对于您的场景,我建议您尝试使用某种EventBus(发布/订阅机制)从您的活动到片段进行通信。
答案 1 :(得分:0)
最好创建一个新片段。但是,它还取决于你想要做什么。如果你做异步,或使用观察者模式,保持参考更好
答案 2 :(得分:0)
您要在NewsFragment中共享的数据,您可以在系统上下文类中使用它并将数据存储在那里(getter / setter),但是您只需要调用此类方法,而不是每次都创建片段的实例。