私は、左側にメニューの選択肢のリストを表示し、中央にコンテンツを表示する、古典的なリスト コンテンツ パターンを持つアプリケーションで作業しています。さまざまなメニュー選択により、コンテンツが新しい情報を表示する対応するフラグメントと交換されます。
適切なアップ ナビゲーションの実装に苦労しています。
|---------------------------------------|
|< Frag. B | B1 B2 B3 |
|----------|----------------------------|
|Fragment A| |
[Fragment B] |
|Fragment C| Fragment B.2 |
|Fragment D| |
|Fragment E| |
|----------|----------------------------|
上の図では、ユーザーは Fragment B.2 に移動しています。彼は最初にメニューからフラグメント B を選択し、その後ボタンを押して、フラグメント B に「さらに」進み、フラグメント B.2 に移動しました。
ユーザーがここで HOME (ホームのようにアップ) ボタンを押すと、フラグメント B に戻ります。これは意図したとおりに機能しています。
ただし、フラグメント B.2 内には、ユーザーをフラグメント E.2 に移動させるボタンが ActionBar にあります。
|---------------------------------------|
|< Frag. E | E1 E2 E3 |
|----------|----------------------------|
|Fragment A| |
|Fragment B| |
|Fragment C| Fragment E.2 |
|Fragment D| |
[Fragment E] |
|----------|----------------------------|
ユーザーがフラグメント E.2 に到達すると、バック スタック内の前のフラグメントはフラグメント B.2 になります。私の現在の実装はgetActivity().onBackPressed()
、HOME ボタンが押されたときに呼び出すだけで、ユーザーはフラグメント B.2 に戻るだけです。これはユーザーにとって意味をなさないので、ユーザーをフラグメント E に移動させるシステムを実装したいと思います (フラグメント B.2 はバックスタックの前のフラグメントですが)。
私の当面のアイデアは、すべてのフラグメント内で、バックスタックの前のフラグメントとして動作する必要があるフラグメントへの参照を持つことでした。フラグメント B.2 はフラグメント B への参照を持ち、フラグメント E.2 はフラグメント E への参照を持ちます。HOME ボタンが押されると、前のフラグメントとして参照されるフラグメントを起動します。私はこの解決策について議論しましたが、非常にぎこちなく聞こえることは言うまでもなく、これがバックスタックに関してかなり複雑になる可能性があることにすぐに気付きました。
この種の動作を実装するスマートな方法はありますか?