1. ホーム
  2. android

[解決済み] フラグメントを用いたAndroidの各タブ毎のバックスタックの分離

2022-04-26 15:48:07

質問

Androidアプリでナビゲーションのためのタブを実装しようとしています。TabActivityとActivityGroupは非推奨なので、代わりにFragmentを使って実装したいのですが、可能でしょうか?

各タブに1つのフラグメントを設定し、タブがクリックされたときにフラグメントを切り替える方法は知っています。しかし、タブごとに個別のバックスタックを持つにはどうすればよいですか?

例えば、フラグメントAとBはタブ1の下に、フラグメントCとDはタブ2の下に配置します。アプリを起動すると、フラグメントAが表示され、Tab1が選択されています。Tab2が選択されると、Fragment Cが表示されるはずです。Tab1 を選択すると、再び FragmentB が表示されます。このとき、バックボタンでフラグメントAを表示させることができるはずです。

また、デバイスを回転させても、各タブの状態が維持されることが重要です。

BR マーチン

解決方法は?

現在、フレームワークが自動的にこれを行うことはありません。 各タブごとに独自のバックスタックを構築し、管理する必要があります。

正直なところ、これは本当に疑わしいことだと思います。 まともなUIになるとは思えません。もしバックキーが今いるタブによって異なる動作をするなら、特にバックキーがスタックの一番上にあるときにアクティビティ全体を閉じるという通常の動作もするとしたら・・・嫌な予感がしますよね。

WebブラウザーのUIのようなものを作ろうとしている場合、ユーザーにとって自然なUXを得るためには、コンテキストに応じて動作を微妙に調整する必要があります。したがって、フレームワークのデフォルト実装に依存するのではなく、独自のバックスタック管理を行う必要があります。 たとえば、標準的なブラウザに出入りするさまざまな方法において、バックキーがどのように作用するかに注目してください。 (ブラウザの各ウィンドウは本質的にタブです)。