作業中の音楽プレーヤーに対して、「祖先」および「一時」ナビゲーション(上ボタンと戻るボタンを使用)を実装するための最良の方法を見つけようとしています。
現在、ユーザーにはビューページャーが表示され、3つのメインフラグメント(ArtistMain、AlbumMain、SongMain)の間でページングできます。そのビュー内のアイテムを選択すると、フラグメントトランザクションが発生し、ビューページャーが表示されなくなり、新しいフラグメント(ユーザーの出身地に応じて、AlbumSub、Songsub、またはplayer)に置き換えられます。ユーザーは、曲が選択されるまでさらに深くナビゲートでき、その後、「プレーヤー」画面に移動します。
問題は、この条件付きナビゲーションをすべて実装するにはどうすればよいかということだと思います。
私はAndroidとプログラミング全般にかなり慣れていませんが、これを実現するための効率的な方法を思い付くことができないようです。現時点では、各フラグメントが表示されると、アプリはユーザーがどこから来たのかを確認し、帰宅または自宅に呼び出された場合にユーザーをどこに連れて行くべきかを決定します。これは、「fromArtistMain」、「fromAlbumSub」などのブール値があり、「fromSongSub&&fromPlayer」などをチェックしていることを意味します。すべてが少し混乱しています。
私が達成しようとしているナビゲーションを描くために、図を描きました(ペイントで、ごめんなさい!!)。黄色は「上」ボタンの押下を表し、赤は「戻る」ボタンの押下を表し、青色は通常のナビゲーションです。緑の矢印は、ビューのページングを表すためのものです。
どんなアドバイスでも大歓迎です。私が見落としたような本当に単純なことが必要かもしれません。
御時間ありがとうございます。
編集:
私はバックスタックにフラグメントを追加してきましたが、popBackStack()呼び出しを使用すると、問題は、バックスタックをポップすることが必ずしも正しいオプションではないということです。
私は現在、トランザクションを最初にバックスタックに追加する必要があるかどうかを判断しようとするコードの混乱を抱えています。
次の点を考慮してください。ユーザーは「SongMain」から直接曲を選択し、「Player」に移動します。ここで、ホームボタンを使用して(私の考えでは)、ユーザーをSongSub(選択した曲が属するアルバムの曲のリスト)に移動します。これで、ユーザーが再び上に移動すると、そのアーティストのアルバムのリストである「AlbumSub」に移動します。これはフラグメントトランザクションですが、バックスタックに追加すると、ユーザーはバックプレスでレベルが下がることになります(これは予想外のことだと思います)。したがって、この場合、その特定のトランザクションをバックスタックに追加しません-問題ないように見えますが、かなりの数の異なるケースがあり、可視性の出入りが必要な上部のビューページャーと組み合わせると、コードは実際に取得されます混雑。
これはすべて、ユーザーがどこから来たのか、そしてそこに到達するためにどのパスをたどったのかを決定する一連の条件を意味します。
ユーザーがナビゲートした場所に応じて設定される多数のブール値をホストアクティビティに含め、それらのブール値をチェックして、トランザクションをバックスタックに追加する必要があるかどうかを確認するのが賢明でしょうか。これは私がすでに持っているものの一種ですが、それは本当に非効率的なようです。