タブレットと Google TV 向けのアプリケーションを開発しています。これは、LeftNavBar と、すべてのアプリケーション画面に共通のトップ検索バーを備えた、多くの標準的な Google TV アプリケーションのようなものです。次の画像のようになります。
メインスクリーン
RED エリアは、他のすべての画面では異なります。次の画面のモックアップのようなデータが含まれる場合があります。
メインコンテナに積み込まれたActivity One
アクティビティ 2 がメイン コンテナに積み込まれました
したがって、メイン領域にまったく異なるセクションをロードできることがわかります。
画面 3 は、画面 2 で任意のリスト項目を選択したときに詳細セクションとしてロードできます (たとえば、フラグメント リストで)、またはタブを選択した結果としてロードできます (LeftNavBar に表示されます)。
これが私がそれを実装しようとしている方法です。
ステップ 1.次の XML を使用してメイン アクティビティを作成しました。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#9ccc" >
<!-- Top Bar -->
</LinearLayout>
<FrameLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<!-- main Red Container that will load other Activities -->
</FrameLayout>
</LinearLayout>
mainContainer
アクティビティをロードしたい RED コンテナです。LeftNavBar
すべての親としてこのアクティビティに追加されます。
ステップ 2ActivityOne
それぞれ 2 つと 3 つのフラグメントを含む&を作成ActivityTwo
しました (上記の 2 番目と 3 番目の画像に示すように)。
*手順 3ActivityOne
メイン ページのmainContainer FrameLayoutを読み込もうとしていますが、追加できません。
次のようにを追加してみましActivityOne
たmainContainer
:
View v = (new ActivityOne()).getWindow().getDecorView();
FrameLayout mainContainer = (FrameLayout) findViewById(R.id.mainContainer);
mainContainer.addView(v);
しかし、getWindow()
リターンnull
....
すべてのデータがリモートサービスから取得されるため、他の問題が発生しますmainContainer
..また、ロードされたすべてのアクティビティへの参照をある種のスタックに保持する方法を提案してください...すでにロードされているアクティビティをリロードできます新しいインスタンスを作成する代わりに..これは、BACK ボタンを押したときに使用されます。
また
上記の RED コンテナにアクティビティをロードする代わりに、それぞれ独自のフラグメントと LeftNavBar を持つ 2 つのアクティビティを作成する必要があります。これは、前述のアプローチよりも簡単かもしれません。またはこれが唯一の解決策かもしれません....しかし、BACKボタンの状態の保存が面倒になるかもしれないと感じています..しかし、これを実装してみます
このタイプのアプリケーションを作成する必要があるとしたら、どうしますか? 最高のパフォーマンス/プラクティスのために UI レイアウトをどのように設計しますか?
このアプリのレイアウトを設定するのに役立つ提案をいただければ幸いです。