繁体   English   中英

避免使用哈希图重新创建片段

[英]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支持库有两个片段适配器, FragmentPagerAdapterFragmentStatePagerAdapter 第一个是将片段保存在内存中的适配器。

我如何避免这种情况? 还有其他方法可以实现我的目标吗?

如果您确实想避免一次又一次地重新创建活动实例,请使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM