[英]Avoid fragment recreation with hashmap
我有一个活动,可以处理5个片段。 每当活动替换每个片段时,都会调用onCreate和onCreateView。 为了避免这种情况,我创建了一个HashMap来存储每个片段。 在活动替换片段之前,它会检查哈希图是否已存在该片段。 如果存在,它将用地图中的实例替换旧片段。 在其他情况下,它使该片段无效,然后替换旧的片段。
尽管我在哈希图上找到片段时避免了片段的插入,但正在调用onCreate和onCreateView。 我如何避免这种情况? 还有其他方法可以实现我的目标吗?
首先,HashMap没有使用它来保存片段的引用。 您可以在添加/替换标记时将其设置为片段。 看看FragmentTransaction.add(int,Fragment,String)和FragmenTransaction.replace(int,Fragment,String)方法。 如果为标签提供唯一的String,则可以使用FragmentManager.findFragmentByTag(String)方法检索Fragment。 片段引用的容器是多余的。
直截了当:如果您使用replace / add方法显示一个Fragment,则会调用onCreate()和onCreateView()。 为了避免onCreate()调用,您可以仅附加和分离您的Fragments。 这样,仅onCreateView()会被调用。 但是,这是不可能的,以防止onCreateView()调用。
也许用一些细节来更新您的问题要达到的目的,因为这听起来您完全走错了路。
您的目标不是很明确。
当处理碎片时,请记住,您对其生命周期的控制是有限的,因此您只能扩展(系统控制的)对象。 您可以在此处阅读片段的生命周期: 创建片段 。
假设您的目标是在5个活动片段之间切换,那么我可以想到两个选择:
选项1:设计片段,以便可以快速重新创建它们,将数据保留在其他位置,并将其提供给片段,而片段仅用于显示数据。
选项2:android支持库有两个片段适配器, FragmentPagerAdapter和FragmentStatePagerAdapter 。 第一个是将片段保存在内存中的适配器。
我如何避免这种情况? 还有其他方法可以实现我的目标吗?
如果您确实想避免一次又一次地重新创建活动实例,请使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.