問題タブ [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.

0 投票する
7 に答える
142853 参照

android - これは、深くネストされたスタックを残すときにフラグメントバックスタックをクリーンアップする正しい方法ですか?

Android互換ライブラリを使用してフラグメントを実装し、レイアウトサンプルを拡張して、フラグメントに別のフラグメントを起動するボタンが含まれるようにしました。

左側の選択ペインには、5つの選択可能なアイテムがあります- A B C D E

FragmentTransaction:replaceそれぞれが詳細ペインにフラグメントを(経由で)ロードします-a b c d e

これで、フラグメントを拡張して、詳細ペインにもe別のフラグメントをロードするボタンを含めることができました。e1これは、フラグメントeのonClickメソッドで次のように実行しました。

次の選択をした場合:

次に、フラグメントeが詳細ペインに表示されます。これは問題なく、私が欲しいものです。ただし、backこの時点でボタンを押しても何も起こりません。e1まだスタック上にあるので、2回クリックする必要があります。さらに、クリックした後、onCreateViewでnullポインタ例外が発生しました。

この問題を「解決」するために、A B C D E選択するたびに以下を追加しました。

これが正しい解決策なのか、それとも私が何か違うことをすべきなのか疑問に思っていますか?

0 投票する
3 に答える
5744 参照

android - Android - 戻るボタンとフラグメント バックスタックが機能しない

単一の FragmentActivity を使用して、単純なフラグメント ベースのアプリケーションを開発しています。アプリケーションの各「画面」はフラグメントに含まれており、アプリケーションの起動時にすべてのフラグメントがコンテナー レイアウトに追加されます。

遷移は、現在表示されているフラグメントを非表示にしてから、適切なフラグメントを表示することによって実行されます。

これはすべて正常に機能しますが、戻るボタンが押されると、どの画面が表示されているか、バックスタックに追加された以前のトランザクションに関係なく、アプリケーションが終了します。

バックスタックがレコードを適切に蓄積していることを確認し、フラグメントを非表示/表示するのではなく置換する、変数に格納するのではなくフラグメントの新しいインスタンスを作成するなど、さまざまな遷移方法のバリエーションを試しました。私が知ることができるように、私のコードは私が見つけることができるすべてのチュートリアルと例に一致し、おそらく標準的な実装が他の人にとって「うまくいく」ため、同様の質問/同様の問題の例を見つけることさえできませんでした.

マニフェストのプロパティ(かなり徹底的に調査しました)や、アプリケーションの設定方法に固有のものなど、アプリケーションレベルの問題である可能性があり、戻るボタンが正しく機能しない可能性があります。トランジションを手動で処理するために onBackPressed をオーバーライドできますが、これは非常に醜い回避策のようです。これが期待どおりに動作しない理由についてのアイデアはありますか? ちなみに、これはJelly Beanを実行しているNexus 7にあります。

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

android - 現在の Fragment から最後の ListFragment を復元する方法

私のアプリはこのような構造をしています

MainActivityは ActionBarActivityを拡張します-- ボタンを押したとき -> ListFragment --リスト項目を押したとき--> Fragment

Fragmentで 戻るキーを押すと、MainActivity に直接移動します。ListFragment に移動するにはどうすればよいですか

以下は、私が期待していることです

Fragment *----戻るキーが押された場合-> *ListFragment -- 戻るキーが押された場合---> MainActivity extends ActionBarActivity

次のコードは、フラグメントを開始するために mainactivity と listfragment で使用しているものです

アップデート

今、私は MainActivity に次のコードを追加しました

そして、私のリストフラグメントへの次のコード

リストフラグメントまたはフラグメントで戻るボタンを押しても戻らないようになりました

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

android - putFragment() - フラグメント x は現在 FragmentManager にありません

FragmentStatePagerAdapter上記のタイトルはよく聞かれますが、答えは私の問題とは関係のないものと密接に関係しているようです。メソッドputFragment(Bundle, String, Fragment)を直接使用しています。

AndroidドキュメントputFragment(Bundle, String, Fragment)は次のように書かれています:

ただし、次のコードは例外をスローします。

上記を使用している理由は、ContentFragment と ActionBar フラグメントの両方が、getArguments()現在バックスタックの一番上になくても、結果を使用して反対の番号を見つけることができるようにするためです。たとえば、透過によって部分的に遮られている場合などです。スタックの上位にあるフラグメント。

ただし、例外が発生します。

commit()このことから、UI スレッドで実行されるようにトランザクションをスタックに置くだけで、putFragment()そのトランザクションが実行される前に呼び出しが行われていると結論付けることができますか? それとも私は何かを誤解していますか?(Android サイトのドキュメントには、フラグメントが本来あるべき状態であると想定するための前提条件の状態については何も記載されていません)。

commit()呼び出しが早すぎると思われる理由のテキストに注目する価値があります。考えられる答えは、リスナーをトランザクションにアタッチして、トランザクションが処理されたときに通知する方法ですcommit()。私はそれが存在するとは思わない...

このトランザクションのコミットをスケジュールします。コミットはすぐには行われません。次回のスレッドの準備ができたときに実行されるように、メイン スレッドでの作業としてスケジュールされます。

編集

commit()ひどい解決策を使用して、それが問題であることを確認しました:

実際のソリューションは今でも高く評価されています。

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

android - フラグメントの状態をバックスタックに保存

私の問題は一般的にこの質問で説明されています: バックスタックにフラグメントのインスタンス状態を正しく保存する方法は?

しかし、受け入れられた答えがそれにどのように関連しているか理解できません。

短くするために:

  1. 2 つのフラグメント A と B があります。

  2. transaction.replace() を使用して A から B に移動し、トランザクションをバックスタックに追加します。

  3. 画面を回転させます -> フラグメント A は表示されませんが、onSaveInstanceState が呼び出されます - この時点まではすべて問題ありません。

  4. もう一度画面を回転させます。再び A の onSaveInstanceState が呼び出されますが、現在はビューが存在しないため、状態を保存できません。

受け入れられた回答が示唆するように、getFragment/putFragment を使用する目的は何ですか? 私のフラグメントがバックスタックにある場合、それへの参照を保持する意味はないと思います。ありがとう。

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

android - ビューをバックスタックに追加する方法 (アンドロイド)?

現在、新しいマテリアル デザインの原則を使用してアプリを構築しています。アプリでは、ユーザーがリスト ビュー アイテムをクリックすると、パネルが画面の下部から上にスライドし、フラグメントが格納されます。私の問題は、パネルが展開され、ユーザーが戻るボタンをクリックすると、パネルが下にスライドするのではなく、アプリが終了することです。ユーザーがリスト ビューの行をクリックしても、新しいアクティビティやフラグメントは起動されないため、これを正しく機能させる方法がわかりません。

私が必要とするのは、ユーザーがリストビューの行をクリックするとパネルが展開され、ユーザーが戻るボタンをクリックするとパネルを閉じるメソッドが呼び出されるようにすることです(現在戻るボタンを押すとアプリが閉じます)。

ビューの変更をバックスタックに追加する方法、または目的の動作を取得する方法を誰かが説明できれば、非常に感謝しています。

ありがとうコーリー:)

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

android - カスタム バックスタック階層を使用したフラグメント ナビゲーション

アプリのある時点で特定の動作を作成する必要があります。ナビゲーション ドロワーを使用し、フレーム レイアウトのフラグメントを置き換えます。

バックスタックにいくつかのフラグメントがあるとしましょう: A -> B -> C.
A はアプリのルート フラグメントの 1 つで、A で [戻る] ボタンが押されると、アプリは終了します。

私が C にいるとき (バックスタックに A と B がある)、バックスタックに D がある E に行きたいです。E の戻るボタンを押すと、D に移動したいという意味です (D はアプリの別のルート フラグメントです。D の戻るボタンを押すと、アプリは終了します)。

今のところ、バックスタックをクリアしてから、現在のフラグメントを D に置き換えてから E に置き換えます。
これの問題は、C から E への移行中にフラグメント A が少しの間見えることです (そして、それは醜いです)。右?)

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

android - 上キャレットにナビゲーション ドロワーを表示

これ以上言うことはありません。私は単一のアクティビティを使用しており、 and を呼び出す Fragment に入りsetDisplayHomeAsUpEnabled(Boolean.TRUE)ますsetHasOptionsMenu(Boolean.TRUE)。メニューには 2 つの項目があり、それらの操作は適切です。すべてonOptionsItemSelectedのアプリ (アクティビティ、フラグメント、ドロワー トグルを含む) にブレークポイントを設定しましたが、デバッグ時にメニューが開き、ブレークポイントがトリガーされません。

役立つ場合のアクティビティとフラグメントのコード:

フラグメントコード:

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

android - フラグメントトランザクションを行う正しい方法

1 つのアクティビティと複数のフラグメントを持つ Android アプリケーションを開発しています。私のアプリにはナビゲーション ドロワーが含まれています。レイアウトにはリストビューが含まれています。アイテムをクリックしてフラグメントを動的に変更しft.replace(R.id.my_placehodler, new MyFragment())、トランザクションを追加しbackstack ft.addToBackstack(null)ます。新しいフラグメントをインスタンス化するたびに新しいトランザクションを作成するとき。それは良いアプローチではないように私には思えます。フラグメント トランザクションを行う正しい方法について提案をいただけますか?

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

android - バックスタック Android フラグメント ナビゲーション

これは、ナビゲーション ドロワーを使用してフラグメントを表示する方法です。

ユーザーが次の場所に移動したとします。Fragment 2-> Fragment 5-> Fragment3.

ユーザーがクリックすると、各フラグメントに andback buttonが必要です。その特定の場所に移動すると、フラグメントのが表示されます。descending ordernamefragment

Fragment 3-> Fragment 5-> Fragment2.

これは私が試したことです:

最初の方法:

2 番目の方法:

これを機能させることができません**(つまり、元のフラグメントに戻すことができません**)、バックスタックに基づいてフラグメントの名前を表示できません

どんな助けでも大歓迎です。