Требуется руководство по разработке сложного пользовательского интерфейса Android (фрагментов)

Я разрабатываю приложения, предназначенные для планшетов и Google TV. Это будет похоже на многие стандартные приложения Google TV с левой панелью навигации и верхней панелью поиска, общей для всех экранов приложений. Это будет выглядеть примерно так, как показано на следующем изображении:

Главный экран enter image description here

КРАСНАЯ область будет отличаться для всех остальных экранов. Он может содержать такие данные, как следующие макеты экранов:

Activity One загружается в основной контейнер enter image description here

Activity Two загружается в основной контейнер enter image description here

Таким образом, вы можете видеть, что в основной области могут быть загружены совершенно разные разделы.

Экран 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. Это может быть проще, чем вышеупомянутый подход. или это может быть единственным решением.... однако я чувствую, что сохранение состояния для кнопок НАЗАД может привести к путанице... но я попытаюсь реализовать это

Что бы вы сделали, если бы вам пришлось создавать приложения такого типа? Как бы вы разработали макет пользовательского интерфейса для лучшей производительности/практики?

Ваши предложения, помогающие мне настроить макет этого приложения, очень ценятся.

11
задан Aamir 28 July 2012 в 07:24
поделиться