アプリケーション(ターゲット 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 は役に立たないようです。
マイルストーン (現在動作中、改善予定) ソリューション今日私が学んだことの 1 つは、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);