マップ、人、場所、イベントの 4 つのタブを持つアプリを作成中です。アプリ内の人、場所、イベントは、マップ上にアイコンとして表示されます。デフォルトでは、[人]、[場所]、および [イベント] タブにはそれぞれ、カスタム レンダリングされたリストビューが表示され、すべての人、場所、およびイベントがそれぞれ表示されます。
代替テキスト http://web6.twitpic.com/img/37202700-f92052dc474b74e1760edda1c47f6940.4adcb134-scaled.png
現在、各タブには、対応するアクティビティを起動するように設定されたインテントがコンテンツとして含まれています。たとえば、MapActivity を拡張する MapTabActivity や、人を表示する ShowPeopleListActivity などがあります。
TabHostのセットアップ方法にはさまざま な制限があるため、アクティビティをタブのコンテンツとして使用しないことをお勧めします。たとえば、新しいアクティビティを起動して、タブ内の既存のアクティビティの代わりにすることはできませんが、ビューを別のビューに切り替えることは可能です。
今、私は岐路に立っています。私たちは (良くも悪くも) かなりの時間を費やして、このアプリを現在の構造のように機能させ、Activity をタブのコンテンツとして機能させようとしました。人物、場所、またはイベントに対応するアイコンがクリックされると、そのオブジェクトに対応する URI で VIEW インテントが起動されます。これは、オブジェクトを表示するアクティビティによって取得されます。同じメカニズムが、マップと個々のリストの両方で機能しています。これが提供する疎結合が非常に気に入っています。VIEW コマンドと URI を人/場所/イベントに与えるだけで、自動的に適切なアクティビティに移動します。確かに、起動されたアクティビティはタブ ビュー内に表示されるのではなく、タブ ビューを覆い隠しますが、私たちはこれを受け入れるつもりでした。
ただし、ここで問題があります。Show アクティビティから、その人、場所、またはイベントを中心としたマップに戻ることができるようにしたいのです。マップを再度表示するために新しいアクティビティを起動できますが、これで、マップ アクティビティがタブのコンテンツとして表示され、アクティビティ スタックに表示アクティビティと新しいマップ アクティビティが追加されました。マップ アクティビティがリソースを大量に消費することを考えると、これは理想的な方法ではないと思います。
私の質問は、TabHost で複雑なタスクを実行する方法を正確に示す良いチュートリアルがどこかにあるのでしょうか? HelloTabWidgetを見てきました。これよりもはるかに洗練されたものを探しています。ビューベースの方法に切り替えると、すべてのバックイベントをインターセプトし、ビューなどを切り替えようとするために多くのハウスキーピングを行う必要があるのではないかと心配しています.私たちが望んでいない方法でプログラムを強く結合します。
前進するための提案は非常に高く評価されます。私たちは Android を初めて使用するので、確立されたベスト プラクティスに従おうとしていますが、これまでに見たいくつかの例が私たちのユース ケースに対して単純すぎる場合、それは困難です。