Я разрабатываю приложения, предназначенные для планшетов и Google TV. Это будет похоже на многие стандартные приложения Google TV с левой панелью навигации и верхней панелью поиска, общей для всех экранов приложений. Это будет выглядеть примерно так, как показано на следующем изображении:
Главный экран
КРАСНАЯ область будет отличаться для всех остальных экранов. Он может содержать такие данные, как следующие макеты экранов:
Activity One загружается в основной контейнер
Activity Two загружается в основной контейнер
Таким образом, вы можете видеть, что в основной области могут быть загружены совершенно разные разделы.
Экран 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
это КРАСНЫЙ контейнер, в который я хочу загрузить действия. LeftNavBar
будет добавлено к этому действию как родительское для всех.
Шаг 2 Я создал ActivityOne
и ActivityTwo
с двумя и тремя фрагментами соответственно (, как показано на втором и третьем изображениях выше ).
*Шаг 3 Я пытаюсь загрузить ActivityOne
в mainContainer FrameLayout главной страницы... Но я не могу его добавить.
Я попытался добавить ActivityOne
к mainContainer
следующим образом:
View v = (new ActivityOne()).getWindow().getDecorView();
FrameLayout mainContainer = (FrameLayout) findViewById(R.id.mainContainer);
mainContainer.addView(v);
но getWindow()
возвращает null
....
Другая проблема возникает из-за того, что все данные поступают из удаленных служб .. поэтому, пожалуйста, также предложите, как я могу хранить ссылки на все загруженные действия в mainContainer
в каком-то стеке...поэтому я могу просто перезагрузить уже загруженную активность вместо создания ее нового экземпляра. Это будет использоваться при нажатии кнопки НАЗАД.
ИЛИ
Вместо того, чтобы загружать действие в указанный выше контейнер RED, я должен создать два действия, каждое со своими собственными фрагментами и LeftNavBar. Это может быть проще, чем вышеупомянутый подход. или это может быть единственным решением.... однако я чувствую, что сохранение состояния для кнопок НАЗАД может привести к путанице... но я попытаюсь реализовать это
Что бы вы сделали, если бы вам пришлось создавать приложения такого типа? Как бы вы разработали макет пользовательского интерфейса для лучшей производительности/практики?
Ваши предложения, помогающие мне настроить макет этого приложения, очень ценятся.