应用程序(目标 API 级别必须为第 7 级)在作为额外传递的片段密钥FragmentActivity
处进行分析。onCreate
现在需要重新排序到前面已经用给定的片段键创建的活动。
假设FragmentActivity
具有不同片段键的 FA1
和FA2
-FA3
每个都是具有不同片段的相同活动类实例。
现在在堆栈中FA1
> FA2
>FA3
我想使用意图而不是后退按钮来访问FA2
,默认情况下会给出:
FA1
> FA2
> FA3
> 新的FA2
。
我想获得FA1
> FA3
>FA2
因为FA3
可能有一些待处理的操作, FA1
>FA2
没有那么好,但肯定比默认值好。
如果有几个活动,我会使用FLAG_ACTIVITY_REORDER_TO_FRONT
标志来表示意图,但这不适用于这种情况。
FA1, FA2, FA3, etc.
都是同一个类的所有实例MyFA
,这就是为什么我无法使用意图标志并且 FragmentManager 似乎没有帮助,直到有一个标准的全局片段缓存。
里程碑(目前正在工作并有待改进)解决方案我今天学到的一件事是活动别名,它允许为同一个活动创建多个别名,并将不同的 Intent 附加项用作 id。现在使用 REORDER_TO_FRONT 标志,它可以按我的意愿工作。
解决方案反馈该解决方案没有低级操作,我更喜欢挖掘任务或回栈。现在的缺点是每个这样的活动都需要一个带有硬编码路径的单独别名,我不太喜欢它。
要求(赏金在这里)进行了不错的优化的人需要150 300 个 cookie。不错 ?任何其他固溶体也受到高度赞赏。
目前我在应用程序清单中有 10 个别名,例如
<activity
android:name=".activity.FragmentActivity"
android:configChanges="orientation"
android:screenOrientation="portrait" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="com.company.name.intent.FragmentActivity" />
</intent-filter>
</activity>
<activity-alias
android:name="com.company.name.intent.FragmentActivity.FragmentedOne"
android:targetActivity=".activity.FragmentActivity" >
<intent-filter>
<action android:name="com.company.name.intent.FragmentActivity.FragmentedOne" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="fragment_key_extra"
android:value="FragmentOne" />
</activity-alias>
<activity-alias
android:name="com.company.name.intent.FragmentActivity.FragmentedTwo"
android:targetActivity=".activity.FragmentActivity" >
<intent-filter>
<action android:name="com.company.name.intent.FragmentActivity.FragmentedTwo" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="fragment_key_extra"
android:value="FragmentTwo" />
</activity-alias>
然后活动重新排序
Intent intent = new Intent(
"com.company.name.intent.FragmentActivity.FragmentedOne");
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);