問題タブ [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 - これは、深くネストされたスタックを残すときにフラグメントバックスタックをクリーンアップする正しい方法ですか?
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
選択するたびに以下を追加しました。
これが正しい解決策なのか、それとも私が何か違うことをすべきなのか疑問に思っていますか?
android - Android - 戻るボタンとフラグメント バックスタックが機能しない
単一の FragmentActivity を使用して、単純なフラグメント ベースのアプリケーションを開発しています。アプリケーションの各「画面」はフラグメントに含まれており、アプリケーションの起動時にすべてのフラグメントがコンテナー レイアウトに追加されます。
遷移は、現在表示されているフラグメントを非表示にしてから、適切なフラグメントを表示することによって実行されます。
これはすべて正常に機能しますが、戻るボタンが押されると、どの画面が表示されているか、バックスタックに追加された以前のトランザクションに関係なく、アプリケーションが終了します。
バックスタックがレコードを適切に蓄積していることを確認し、フラグメントを非表示/表示するのではなく置換する、変数に格納するのではなくフラグメントの新しいインスタンスを作成するなど、さまざまな遷移方法のバリエーションを試しました。私が知ることができるように、私のコードは私が見つけることができるすべてのチュートリアルと例に一致し、おそらく標準的な実装が他の人にとって「うまくいく」ため、同様の質問/同様の問題の例を見つけることさえできませんでした.
マニフェストのプロパティ(かなり徹底的に調査しました)や、アプリケーションの設定方法に固有のものなど、アプリケーションレベルの問題である可能性があり、戻るボタンが正しく機能しない可能性があります。トランジションを手動で処理するために onBackPressed をオーバーライドできますが、これは非常に醜い回避策のようです。これが期待どおりに動作しない理由についてのアイデアはありますか? ちなみに、これはJelly Beanを実行しているNexus 7にあります。
android - 現在の Fragment から最後の ListFragment を復元する方法
私のアプリはこのような構造をしています
MainActivityは ActionBarActivityを拡張します-- ボタンを押したとき -> ListFragment --リスト項目を押したとき--> Fragment
Fragmentで 戻るキーを押すと、MainActivity に直接移動します。ListFragment に移動するにはどうすればよいですか
以下は、私が期待していることです
Fragment *----戻るキーが押された場合-> *ListFragment -- 戻るキーが押された場合---> MainActivity extends ActionBarActivity
次のコードは、フラグメントを開始するために mainactivity と listfragment で使用しているものです
アップデート
今、私は MainActivity に次のコードを追加しました
そして、私のリストフラグメントへの次のコード
リストフラグメントまたはフラグメントで戻るボタンを押しても戻らないようになりました
android - putFragment() - フラグメント x は現在 FragmentManager にありません
FragmentStatePagerAdapter
上記のタイトルはよく聞かれますが、答えは私の問題とは関係のないものと密接に関係しているようです。メソッドputFragment(Bundle, String, Fragment)
を直接使用しています。
のAndroidドキュメントにputFragment(Bundle, String, Fragment)
は次のように書かれています:
ただし、次のコードは例外をスローします。
上記を使用している理由は、ContentFragment と ActionBar フラグメントの両方が、getArguments()
現在バックスタックの一番上になくても、結果を使用して反対の番号を見つけることができるようにするためです。たとえば、透過によって部分的に遮られている場合などです。スタックの上位にあるフラグメント。
ただし、例外が発生します。
commit()
このことから、UI スレッドで実行されるようにトランザクションをスタックに置くだけで、putFragment()
そのトランザクションが実行される前に呼び出しが行われていると結論付けることができますか? それとも私は何かを誤解していますか?(Android サイトのドキュメントには、フラグメントが本来あるべき状態であると想定するための前提条件の状態については何も記載されていません)。
commit()
呼び出しが早すぎると思われる理由のテキストに注目する価値があります。考えられる答えは、リスナーをトランザクションにアタッチして、トランザクションが処理されたときに通知する方法ですcommit()
。私はそれが存在するとは思わない...
このトランザクションのコミットをスケジュールします。コミットはすぐには行われません。次回のスレッドの準備ができたときに実行されるように、メイン スレッドでの作業としてスケジュールされます。
編集
commit()
ひどい解決策を使用して、それが問題であることを確認しました:
実際のソリューションは今でも高く評価されています。
android - フラグメントの状態をバックスタックに保存
私の問題は一般的にこの質問で説明されています: バックスタックにフラグメントのインスタンス状態を正しく保存する方法は?
しかし、受け入れられた答えがそれにどのように関連しているか理解できません。
短くするために:
2 つのフラグメント A と B があります。
transaction.replace() を使用して A から B に移動し、トランザクションをバックスタックに追加します。
画面を回転させます -> フラグメント A は表示されませんが、onSaveInstanceState が呼び出されます - この時点まではすべて問題ありません。
もう一度画面を回転させます。再び A の onSaveInstanceState が呼び出されますが、現在はビューが存在しないため、状態を保存できません。
受け入れられた回答が示唆するように、getFragment/putFragment を使用する目的は何ですか? 私のフラグメントがバックスタックにある場合、それへの参照を保持する意味はないと思います。ありがとう。
android - ビューをバックスタックに追加する方法 (アンドロイド)?
現在、新しいマテリアル デザインの原則を使用してアプリを構築しています。アプリでは、ユーザーがリスト ビュー アイテムをクリックすると、パネルが画面の下部から上にスライドし、フラグメントが格納されます。私の問題は、パネルが展開され、ユーザーが戻るボタンをクリックすると、パネルが下にスライドするのではなく、アプリが終了することです。ユーザーがリスト ビューの行をクリックしても、新しいアクティビティやフラグメントは起動されないため、これを正しく機能させる方法がわかりません。
私が必要とするのは、ユーザーがリストビューの行をクリックするとパネルが展開され、ユーザーが戻るボタンをクリックするとパネルを閉じるメソッドが呼び出されるようにすることです(現在戻るボタンを押すとアプリが閉じます)。
ビューの変更をバックスタックに追加する方法、または目的の動作を取得する方法を誰かが説明できれば、非常に感謝しています。
ありがとうコーリー:)
android - カスタム バックスタック階層を使用したフラグメント ナビゲーション
アプリのある時点で特定の動作を作成する必要があります。ナビゲーション ドロワーを使用し、フレーム レイアウトのフラグメントを置き換えます。
バックスタックにいくつかのフラグメントがあるとしましょう: A -> B -> C.
A はアプリのルート フラグメントの 1 つで、A で [戻る] ボタンが押されると、アプリは終了します。
私が C にいるとき (バックスタックに A と B がある)、バックスタックに D がある E に行きたいです。E の戻るボタンを押すと、D に移動したいという意味です (D はアプリの別のルート フラグメントです。D の戻るボタンを押すと、アプリは終了します)。
今のところ、バックスタックをクリアしてから、現在のフラグメントを D に置き換えてから E に置き換えます。
これの問題は、C から E への移行中にフラグメント A が少しの間見えることです (そして、それは醜いです)。右?)
android - 上キャレットにナビゲーション ドロワーを表示
これ以上言うことはありません。私は単一のアクティビティを使用しており、 and を呼び出す Fragment に入りsetDisplayHomeAsUpEnabled(Boolean.TRUE)
ますsetHasOptionsMenu(Boolean.TRUE)
。メニューには 2 つの項目があり、それらの操作は適切です。すべてonOptionsItemSelected
のアプリ (アクティビティ、フラグメント、ドロワー トグルを含む) にブレークポイントを設定しましたが、デバッグ時にメニューが開き、ブレークポイントがトリガーされません。
役立つ場合のアクティビティとフラグメントのコード:
フラグメントコード:
android - フラグメントトランザクションを行う正しい方法
1 つのアクティビティと複数のフラグメントを持つ Android アプリケーションを開発しています。私のアプリにはナビゲーション ドロワーが含まれています。レイアウトにはリストビューが含まれています。アイテムをクリックしてフラグメントを動的に変更しft.replace(R.id.my_placehodler, new MyFragment())
、トランザクションを追加しbackstack ft.addToBackstack(null)
ます。新しいフラグメントをインスタンス化するたびに新しいトランザクションを作成するとき。それは良いアプローチではないように私には思えます。フラグメント トランザクションを行う正しい方法について提案をいただけますか?
android - バックスタック Android フラグメント ナビゲーション
これは、ナビゲーション ドロワーを使用してフラグメントを表示する方法です。
ユーザーが次の場所に移動したとします。Fragment 2-> Fragment 5-> Fragment3.
ユーザーがクリックすると、各フラグメントに andback button
が必要です。その特定の場所に移動すると、フラグメントのが表示されます。descending order
name
fragment
Fragment 3-> Fragment 5-> Fragment2.
これは私が試したことです:
最初の方法:
2 番目の方法:
これを機能させることができません**(つまり、元のフラグメントに戻すことができません**)、バックスタックに基づいてフラグメントの名前を表示できません
どんな助けでも大歓迎です。