web-dev-qa-db-ja.com

Android Fragments and Navigation Drawerで戻るナビゲーション

私はかなり複雑なAndroidアプリケーション(ホームオートメーションシステムに使用))を開発しています。これは基本的に1つのアクティビティ-複数のフラグメントアプリケーションです。

アプリケーションのナビゲーションは、主にナビゲーションドロワーで構成されています。 A..F。と名付けられる6つの異なるカテゴリがあります。これらのカテゴリは独自のナビゲーション階層を持つことができますが、階層を掘り下げるときに明示的な[戻る]ボタンを使用しないことを選択しました。むしろ、常にハンバーガーアイコンを表示します。これにより、ユーザーは常にナビゲーションドロワーにアクセスでき、ハードウェアの[戻る]ボタンを使用して前のフラグメントに戻ることができます。

さて、これは悪い習慣だと言う人もいるかもしれませんが(代わりにその方法を教えてくれれば聞いてください)、アーキテクチャを変更せずに解決したい問題がまだあります。次のユースケースを参照してください。 :

使用事例:

  • ユーザーがアクティビティを開き、フラグメントAに到着します。
  • ユーザーはドロワーを使用してBに移動します
  • ユーザーがBからBbからBcに移動する(Bのサブビュー)
  • ユーザーはドロワーを使用してCに移動します
  • ユーザーはドロワーを使用してBに移動します
  • ユーザーはBからBbからBcに移動します(以前と同じサブビュー)
  • ユーザーは[戻る]ボタンを使用してバックスタック全体を確認します

何が起こるかは、ユーザーに表示される原因です[Bc、Bb、B、C、Bc、Bb、B、A]。

現在、私は通常、動作は正しいと思いますが、[戻る]ボタンを使用すると、ビューを複数回表示するとユーザーエクスペリエンスが低下しますか?もしそうなら、問題はどのように解決できますか?

2
Joakim

私はあなたと同じような状況にあり、私はあなたの主張を完全に理解しています。

私の場合、ナビゲーションドロワーでセクションを切り替えると、新しいフラグメントが表示されます。ユーザーがセクション内を移動すると、フラグメントが置き換えられるため、バックスタックが大きくなります。発生している種類の問題を回避するために、ユーザーが別のセクションに移動したときに、すべてのフラグメントの状態をバックスタックに保存してから、バックスタックをクリアします(そうしないと、ユーザーはとにかく戻ることができます)。 、そして同じセクションに戻ったら、最終的にそれを復元します。

私のコードは最高ではないと思いますが、今のところ、これがこの問題に対する唯一の解決策です。誠実に言うと、ナビゲーションドロワーを備えたこの種のバックスタックスイッチには、「すぐに使える」解決策がないことにちょっと驚いています。

2
papafe

このアーキテクチャの1つの問題は、フラグメントのバックスタックサイズです。これを説明する方法では、スタックが非常に大きくなる可能性があります。なぜこれを行わないのですか...ユーザーがドロワーでアイテムを選択すると、そのタイプのすべてのフラグメントがフラグメントマネージャーから削除されますか?あなたの例では、これは戻るボタンをタップしたときに起こります-Bc、Bb、B、C、A

0
PhilTheThrill