問題タブ [fragment-backstack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - フラグメントトランザクションのバックスタックが機能しない?
したがって、私のメイン アクティビティには 2 つのフラグメントが含まれます。activity_main.xml レイアウト ファイルには、1 つの (リスト) フラグメントと、2 番目のフラグメントのコンテナーとして機能するフレーム レイアウトがあります。
リスト フラグメント リスト ビューでアイテムがクリックされるたびに、クリックされたアイテムに対応する詳細が、フレーム レイアウトに含まれる 2 番目のフラグメントに表示されます。
それは結構です、それはうまくいきます。しかし、フラグメント トランザクション参照を使用して backStack を作成すると、backStack が期待どおりに動作しません。
私が期待したこと:
1) ユーザーがリスト ビューでアイテムをクリックすると、itemClicked に対応する詳細が 2 番目のフラグメント (フレーム レイアウト内) に表示されます。
2) ユーザーがリスト ビューで別のアイテムをクリックすると、そのアイテムに対応する詳細が、前のクリックに対応する詳細に置き換わります。
3) ユーザーが [戻る] ボタンをクリックすると、リスト ビューで前にクリックしたアイテムが、2 番目のフラグメント内のそのアイテムに対応する詳細と共に表示されます。
実際に発生すること:
上記のステップ 1 と 2 を繰り返します。ただし、ステップ 3 では、onStop メソッドが呼び出された後に onDestroy メソッドが呼び出されるため、アプリは終了します。
これがメインのアクティビティです。
編集:
(ユーザーが必要とする LOGCAT):
編集:
ワークアウトの詳細フラグメント:
ワークアウトリストのフラグメント:
データを含むワークアウト クラス:
public class ワークアウト {
android - フラグメントトランザクションにタグを追加するには?
私はこのようFragment
に私のものを追加していActivity
ます:
Fragment
しかし、それを使用してを見つけたいときは、FragmentManager
null を返します。
android - バックスタックから取得した後、フラグメント引数にデータが含まれていません
そのため、TextView やその他の要素の設定に使用されるオブジェクト (オブジェクト O) を含むフラグメント (フラグメント A) があります。フラグメントをインスタンス化するには、静的メソッド A.getInstance(O) を使用します。オブジェクト O はシリアライズ可能であるため、instance.setArguments などを使用してバンドルを介してフラグメント A の新しいインスタンスに送信できます。
A の onCreate メソッドで O を取得し、onViewCreated で O を使用してフィールドをセットアップします。ここまではすべて正常に動作します。A を別のフラグメント (フラグメント B)に置き換え、B から A に戻ると、引数 Bundle にオブジェクト O が含まれなくなり、NullPointerException が発生します。Bundle 自体は null ではありませんが、O は含まれていません。
このメソッドを使用してフラグメントを置き換えます。
フラグメント A も上記の方法を使用して表示されます。
私は何を間違っていますか?
android - android - onbackstackchanged を使用してフラグメント 2 をフラグメント 1 に戻す方法
バックスタックは次のようになりました。
[フラグメント 1] -> [フラグメント 2]
しかし、back を使用してキーを戻す方法
[フラグメント 2] -> [フラグメント 1]
android - Backstack の使用時に TabLayout ViewPager がロードされない
タブの下の 2 つのフラグメントを切り替えるために、viewPager を使用してフラグメントの 1 つで TabLayout を使用しています。
下のフラグメントの 1 つにある FAB をクリックすると、新しいフラグメントが読み込まれます (入力用)。
ただし、[戻る] ボタンを押すと、TabLayout が表示されますが、下のフラグメント (ページで表される) は表示されません。
それで、私は何を間違っていますか?
- フラグメントを交換するより良い方法はありますか?
- 戻るボタンを押して、表示されていたviewPagerページに戻る方法はありますか?
TabLayout を使用したフラグメント: CustomTemplatesFragment
ページャー アダプター: CustomTemplatePagerAdapter
FAB 付きの下位フラグメント: CustomMacroFragment
TabLayout/ViewPager XML
FAB XML を含むフラグメント
android - フラグメントを削除または置換すると、フラグメントはどうなりますか?
Android のドキュメントには、トランザクションがコミットされるとフラグメントが削除されると記載されている以外は、あまり詳しくないようです。フラグメントはなくなったのですか?形而上学的な意味で?それとも、まだどこかに存在し、必要なときに呼び出すことができますか? もしそうなら、あなたはそれをどのように呼びますか?
より実用的な質問として、1 つのフラグメント ビューと、最終的にそのビューに入る複数のフラグメントを含むアクティビティがある場合、バック スタックの最新のもの以外のフラグメントを参照する方法はありますか (質問の目的で、 'すべてそこに置かれています)
android - バックスタック全体を適切にクリアするにはどうすればよいですか (最上位の要素にポップせずに)?
Androidを使用して、バックスタック全体をクリアするのが適切でクリーンな方法であるかどうか疑問に思っていましたか?
そのためにSOで多くの答えを見つけましたが、それらはすべて私を一番上の要素にポップさせます。私が必要としているのは、フラグメントの奥深くに高度なプロセスを行った後、バックスタックをきれいに保つための簡単な方法です。
現在のフラグメントを変更したり、新しいアクティビティを開始したりする必要はありません(パフォーマンス目的で)。さらなるトラブルを避けるために必要なのは、空のバックスタックだけです。
前もって感謝します!
android - FragmentTransaction::replace() の有無にかかわらず addToBackStack()
フラグメントを追加し、後でreplace()
フラグメントを追加するフローを持つ。すべてのフラグメントが動的に追加されますが、すべてが call ではありませんaddToBackStack()
。
そして、どこかに次のように別のものを追加できます:
frgmtB を使用するreplace()
と、コンテナ R.id.frgment_holder から frgmtA が削除されます。この状態で戻るボタンを押すと、frgmtB がポップされます。しかし、いつ追加したときに呼び出さなくても、frgmtA を再作成しaddToBackStack()
ますか?
フラグメントを同じコンテナに追加するフローで、シリアルが add() と replace() の呼び出しが混在していて、誰かが呼び出しaddToBackStack()
ているが誰かが呼び出していない場合、戻るボタンはどのように動作しますか?
編集:後
は
まだfrgmtAを見つけていますか?addToBackStack() とも呼ばれる frgmtA を追加するとどうなりますか。
ドキュメントには、「これは、現在マネージャーのアクティビティに追加されているフラグメントを最初に検索します。そのようなフラグメントが見つからない場合は、現在バックスタックにあるすべてのフラグメントが検索されます。」
ケースは
- frgmtA を追加します。スタックへの追加を呼び出さないでください。UI の状態がここで変更されました。
(frgmtA が add() によって動的に追加されず、class="frgmtA" でレイアウト ファイルに指定されている場合はどうなるでしょうか?)。
() を frgmtB に置き換えます。addToStack();
() を frgmtC に置き換えます。addToStack();
次に、stackTop が frgmtC の場合、戻るボタンを押して最初の frgmtA を最後の UI 状態に戻します。