問題タブ [back-stack]

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.

0 投票する
1 に答える
840 参照

android - Androidのタスクとバックスタック

Androidのバックスタックに疑問があります。同じアプリに2つのアクティビティAとBがあるシナリオを考えてみてください。

  1. Aで始まります。
  2. AからBを使用して起動FLAG_ACTIVITY_NEW_TASK
  3. BからAを使用して起動FLAG_ACTIVITY_NEW_TASK
  4. 戻るボタンを3回押すと、ホーム画面に戻ります。

私の質問は、バックスタックがこのフラグでどのように機能するか、毎回新しいタスクが作成され、前のタスクがバックグラウンドにプッシュされるか、同じタスクの上にアクティビティが作成されるかです。

私の疑問は、最初のものが正しい場合、戻るボタンは実際にスタックの一番上からアクティビティを削除し、2番目が正しい場合、正しい意味でのそのフラグの使用は何ですか?

前もって感謝します。

よろしく、Rohit

0 投票する
4 に答える
56804 参照

android - バックスタックからフラグメントを復元するときの savedInstanceState

savedInstanceState()フラグメントを削除するときに状態を保存し、フラグメントをバックスタックからポップするときに状態を復元するために使用できますか? バックスタックからフラグメントを復元すると、savedInstanceState バンドルは常に null になります。

現在、アプリ フローは次のとおりです: フラグメントの作成 -> フラグメントの削除 (バック スタックに追加) -> バック スタックからのフラグメントの復元 (savedInstanceState バンドルは null)。

関連するコードは次のとおりです。

onSavedInstanceState()問題は、削除されてバックスタックに追加されたときに呼び出されないことだと思います。onsavedInstanceState() を使用できない場合、これを修正する別の方法はありますか?

0 投票する
0 に答える
345 参照

android - フラグメントのアクティビティを離れてから戻ると、バックスタックが消去されているように見える

アップデート #3

ここで何が起こっているのかをさらに理解するために、startActivityForResult を介して VideoView をロードするアクティビティを開始し、予想される requestCode として値 (25) をフィードしました。呼び出しアクティビティの onActivityResult requestCode は 25 ではありません (一貫して 131097 です。これは、テスト中のメモリ使用量のアーティファクトとしてのみ、具体的で一貫していると確信しています)。

アップデート #2

VideoView アクティビティから戻るときに強制的にバックスタック ポップを実行し、フラグメント ビューに沿ってポップ バックする代わりに、コンテナーをポップ バックしました。変。

少し更新

追加した

onCreateView、onResume、および onSaveInstanceState で、バックスタック カウントが消去されているかどうかを確認します。そうではない。だから...バックスタックは実際には消去されていないと思います.Backボタンでアクセスできなくなっただけですか?あたかもコンテンツではなく、フラグメントのコンテナにフォーカスがあるかのようです。か何か。私はここで完全に混乱しています。

更新終了

以前にも同様の質問をしましたが、これはもう少し具体的で、妙に厄介です。

ユーザーがさまざまな分類されたビデオクリップの中から選択できるようにする一連のフラグメントがあります。ビデオ クリップ ビューから始めて、ユーザーは「ハイライト」、「インタビュー」などから選択します。サブカテゴリが選択されると、ユーザーは視聴するビデオを選択します。ビデオ クリップからサブセクションに移動し、[戻る] ボタンを押すと問題なく動作します。ただし、ユーザーがサブセクションでビデオを選択してからヒットバックすると、サブセクションに戻され (良い)、もう一度 [戻る] をクリックしても何も起こりません。あたかもバックスタックがなくなったかのように。

関連するコードは次のとおりです。

バックスタックの作成:

サブメニューからビデオへの移行:

いつもありがとうございます。

0 投票する
20 に答える
283335 参照

android - フラグメント onResume() & onPause() はバックスタックで呼び出されません

アクティビティ内に複数のフラグメントがあります。ボタンをクリックすると、新しいフラグメントが開始され、バックスタックに追加されます。私は当然、現在の Fragment と新しい FragmentのonPause()メソッドが呼び出されることを期待していました。onResume()まあ、それは起こっていません。

ログインフラグメント.java

HomeFragment.java

私が期待していたのは、

  1. ボタンがクリックされると、LoginFragment が HomeFragment置き換えられ、 LoginFragment呼び出され、HomeFragmentが呼び出されますonPause()onResume()
  2. 戻るを押すと、HomeFragmentがポップアウトされてLoginFragmentが表示されonPause()HomeFragmentLoginFragmentonResume()が 呼び出されます。

私が得ているのは、

  1. ボタンをクリックすると、HomeFragmentが LoginFragment を正しく置き換え 、 HomeFragmentのonResume () が呼び出されますが、 LoginFragment のonPause () は呼び出されません。
  2. 戻ると、HomeFragmentが正しくポップして LoginFragment が表示され、 HomeFragmentのonPause () が呼び出されますが、 LoginFragment の onResume() は呼び出されません。

これは正常な動作ですか?戻るボタンを押したときに LoginFragment が呼び出されないonResume()なぜですか。

0 投票する
0 に答える
207 参照

android - Android:FragmentActivityでのArrayIndexOutOfBoundsException(V4 Libをサポート)

これは、code.google.com(http://code.google.com/p/android/issues/detail?id=22404)でホストされているIssue22404と同じ問題です。

要約すると、バックスタック上の4つのフラグメント、バックスタックからdialogFragmentを削除し、電話を回転させます。

の行は次のようになります。フラグメントf=fm.mActive.get(mOps [pos ++]);

mOps[pos++]は何らかの理由で-1のようです。

その理由は、dialogFragmentが削除対象としてマークされ、状態がリセットされたためだと思います。したがって、バックスタックを再構築すると、mOps[pos++]はインデックスに対して-1を返します。

それについて何か考えはありますか?

0 投票する
1 に答える
8801 参照

android - onCreateは、意図的に戻った場合に常に呼び出されます

SurfaceViewがあり、カメラのプレビュー画像を表示するHomeActivityというアクティビティがあります。このアクティビティは静かで重く、開始/再開すると遅く感じます。

そこで、調査を行ったところ、どういうわけか常にonCreateメソッドが呼び出されていることがわかりました。私の意見では、アクティビティがすでに開始されている場合、これは発生しないはずですか?

ドキュメントには次のように書かれています:アクティビティが最初に作成されたときに呼び出されます。ここで、通常の静的設定をすべて行う必要があります。ビューの作成、データのリストへのバインドなどです。このメソッドは、アクティビティの以前にフリーズされた状態(存在する場合)を含むバンドルも提供します。常にonStart()が続きます。

戻るを処理するメソッドは次のとおりです。

編集:

これが私がHomeActivityを離れる方法です...特別なことは何もありません:

0 投票する
15 に答える
159195 参照

android - バックスタックに追加されたときにフラグメントの状態を維持するにはどうすればよいですか?

2つのフラグメントを切り替えるダミーアクティビティを作成しました。FragmentAからFragmentBに移動すると、FragmentAがバックスタックに追加されます。ただし、(押し戻すことによって)FragmentAに戻ると、まったく新しいFragmentAが作成され、元の状態が失われます。私はこの質問と同じことをしたいと思っていますが、問題を根絶するのに役立つ完全なコードサンプルを含めました:

いくつかのログメッセージが追加されました:

FragmentA.onSaveInstanceStateを呼び出すことはなく、ヒットバックすると新しいFragmentAが作成されます。ただし、FragmentAを使用していて画面をロックすると、FragmentA.onSaveInstanceStateが呼び出されます。とても奇妙な...バックスタックに追加されたフラグメントが再作成を必要としないと期待するのは間違っていますか?ドキュメントの内容は次のとおりです。

一方、フラグメントを削除するときにaddToBackStack()を呼び出すと、フラグメントは停止し、ユーザーが戻ったときに再開されます。

0 投票する
2 に答える
3861 参照

android - Android のバックスタックの変更

Android アプリケーションのバック スタックを次のように変更したいと思います。

今のところ、以下の流れです。

A -> B -> C -> D -> E -> F

ユーザーがアクティビティ F に移動すると、スタックから D と E が消去されるように、バック スタックを変更できるようにしたいと考えています。ということで、背中打ったらF→Cの流れ。

また、ユーザーは F からアクティビティ B に進むことができます。これにより、C、D、E、および F も消去されます。

スタックをクリアしたり、一番上のアイテムを削除したりできるという情報を見てきましたが、アクティビティがトリガーされたときに、スタックからいくつかのアイテムを削除したいと考えています。

どんな助けでも大歓迎です、どうもありがとう。

0 投票する
0 に答える
1304 参照

android - フラグメント、方向の変更、フラグメントのバックスタック

現在、ContentPaneとActionBarPaneで構成されるレイアウトがあり、それぞれがのコンテナですFragment

各ContentPaneFragmentは、ファクトリメソッドを使用して独自のActionBarPaneをインスタンス化します。これにより、複雑なsFragmentを非常に簡単かつ迅速に開発できます。ActionBar

これは素晴らしくうまく機能しますが、向きを変えた後のバックスタックのトラバースに関するバグに遭遇しました。

私の「戻る」実装は次のようになります。

これはonBack()、ContentPaneとそのActionBarの両方をはがします。

問題:Fragment Backstack 4つ以上(2つのContentPanesとそのActionBar)に到達し、方向を変更しても goBack() 2番目のActionBarはまだ存在します(の3番目FragmentBackstack

予想どおり、向きを変更しないと、正しいActionBar(Fragment1)が表示されます。

ロギングでは、で4秒onBack()から始まり、各「ポップ」が正常に呼び出され、残り2つだけになります(元のContentPaneとそのActionBar)。FragmentBackstackFragments

前方および後方へのナビゲーションでは、ポップされたものではなく、元のActionBarが正しく使用されます。

オリエンテーション変更で添付されたフラグメントに発生するプロセスと、なぜこれがそのような奇妙な動作を引き起こすのかについて、誰かが知っていますか?

編集

次と同義の出力を提供します。

この出力は、正常な動作が存在する場合と誤った動作が存在する場合の両方で同じです...

0 投票する
2 に答える
245 参照

android - メモが少ないときにアクティビティを終了する

アプリにアクティビティAの開始アクティビティBがあります。アプリが停止し、Androidシステムのメモリが少なくなると、アプリはバックスタックからクリアされます。アプリを再度起動すると、アクティビティBのインスタンス化中に例外が発生します。したがって、メモリが不足しているときにアクティビティBが終了していることを確認したいので、例外は発生しません。onMemoryLow()にfinish()を入れてみましたが、うまくいきませんでした。他に何ができますか?