我有一个处理5个片段的Activity。每次活动替换每个片段onCreate和onCreateView都被调用。为了避免这种情况,我创建了一个HashMap,用于存储每个片段。在活动替换片段之前,如果此片段已存在,则检查散列映射。如果存在,则将旧片段替换为映射中的实例。在其他情况下,它会对片段进行实例化,之后它会替换旧的片段。
尽管我在hashmap上找到它时避免了片段的实现,但仍在调用onCreate和onCreateView。我怎么能避免这个?有没有其他方法可以实现我的目标?
答案 0 :(得分:0)
首先,HashMap没有用于保存片段的引用。您可以在添加/替换它时将标记设置为片段。查看FragmentTransaction.add(int, Fragment, String)和FragmenTransaction.replace(int, Fragment, String)方法。如果为标记提供唯一的字符串,则可以使用FragmentManager.findFragmentByTag(String)方法检索片段。 Fragment引用的容器是多余的。
要点: 如果使用replace / add方法显示Fragment,则调用onCreate()和onCreateView()。要避免onCreate()调用,您只需附加和分离片段即可。这样只会调用onCreateView()。但是 可能会阻止onCreateView()调用。
也许用你想要实现的一些细节更新你的问题,因为这听起来你完全走错了路。
答案 1 :(得分:0)
你的目标不是很清楚。
当你处理片段时,请记住你对生命周期的控制是有限的,你只能扩展(系统控制)对象。您可以在此处阅读片段的生命周期:Creating a Fragment。
假设您的目标是在5个活动片段之间切换,我可以考虑两个选项:
选项1:设计片段,以便快速重新创建,将数据保存在其他位置,并将其提供给片段,片段只显示数据。
选项2:android支持库有两个片段适配器,FragmentPagerAdapter和FragmentStatePagerAdapter。第一个是将片段保存在内存中的适配器。
答案 2 :(得分:-1)
我该如何避免这种情况?有没有其他方法可以实现我的目标?
如果您真的想避免重新创建活动实例,请再次使用android:launchMode="singleTop"
。
示例:强>
<activity
android:name=".YourActivity"
android:label="SomeLabel"
android:launchMode="singleTop">
</activity>
来自开发者文档,
如果活动的实例已存在于目标的顶部 任务,系统通过调用将意图路由到该实例 它的onNewIntent()方法,而不是创建一个新的实例 活性。
来源:http://developer.android.com/guide/topics/manifest/activity-element.html