Я разрабатываю приложения, предназначенные для планшетов и Google TV. Он будет подобен многим стандартным приложениям Google TV с LeftNavBar и верхней панелью поиска, которая является общей для всех экранов приложений. Он будет выглядеть примерно так:
Основной экран
Область RED будет отличаться для всех остальных экранов. Он может содержать такие данные, как следующие макеты экранов:
Действие 1 загружено в основной контейнер
Действие Два загруженных в основной контейнер
Итак, вы можете видеть, что в основной области могут быть загружены совершенно разные разделы.
Экран 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
будет добавлен в эту активность как ее родительский элемент All.
Шаг 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
в некотором виде stack... поэтому я могу просто перезагрузить уже загруженную активность вместо создания своего нового экземпляра.. Это будет использоваться при нажатии кнопки BACK.
ИЛИ
Вместо того, чтобы загружать активность в указанный выше RED-контейнер, я должен создать две операции со своими собственными фрагментами и LeftNavBar. Это может быть проще, чем вышеупомянутый подход. или это может быть единственным решением... однако я чувствую, что сохранение состояния для кнопок BACK может стать беспорядочным.. но я попытаюсь реализовать это
Что бы вы сделали, если бы вам пришлось создавать этот тип приложения? Как бы вы разработали макет пользовательского интерфейса для лучшей производительности/практики?
Ваши предложения в том, чтобы помочь мне настроить этот макет приложения, очень ценятся.