Есть ли альтернатива вложенным фрагментам? - PullRequest
6 голосов
/ 16 марта 2012

Я прочитал, что следует избегать вложенных фрагментов (например, здесь ), но я не вижу, как сделать следующее:

Я работаю над приложением с вкладками (android:minSdkVersion="12") со следующим пользовательским интерфейсом:

enter image description here

Панель поиска всегда здесь, и пользователь может перемещаться по нескольким пунктам меню («Дом», «Галерея» ...). Моя идея состояла в том, чтобы использовать BaseActivity с макетом, содержащим панель поиска и FrameLayout, в котором я бы загружал фрагмент, соответствующий выбору навигации пользователя.

Моя проблема в том, что во фрагменте «Домой» у меня есть несколько вкладок, которые я хотел реализовать таким же образом, то есть с макетом, содержащим панель вкладок и FrameLayout, в который я загружал соответствующий фрагмент, и это приводит вложенному фрагменту ...

Я знаю, что вместо BaseActivity я мог бы использовать несколько действий и включить панель поиска в каждый макет, но он будет отображаться и исчезать каждый раз, когда пользователь будет менять действия ...

EDIT

Мне также нужен фиксированный нижний колонтитул, поэтому я не могу использовать панель действий, предложенную CommonsWare в своем ответе.

Кто-нибудь может помочь?

Ответы [ 5 ]

3 голосов
/ 15 ноября 2012

Есть вложенные фрагменты !!!!!!!в новой версии библиотеки поддержки (поддержка библиотеки v4, версия 11)

2 голосов
/ 16 марта 2012

Для этого можно использовать ViewPager и FragmentPagerAdapter . ViewPager позволяет пользователям перемещаться между представлениями или (в вашем случае) Fragments. Чтобы показать табличные элементы управления, используйте ViewPagerIndicator .

Используя макет, который вы описали, вместо загрузки Fragment в FrameLayout, надуйте его с помощью макета, подобного следующему:

<?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">

    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/viewpagerIndicator"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" />
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

Затем назначьте FragmentPagerAdapter вашему ViewPager, который будет загружать ваши фрагменты.

Также взгляните на мой ответ здесь . Это дает более подробный пример. Однако обратите внимание, что он расширяет PagerAdapter вместо FragmentPagerAdapter, который вы должны использовать.

0 голосов
/ 16 ноября 2012

Хорошие новости !!!!!Библиотека поддержки Android версии 11 уже поддерживает вложенный фрагмент. Пакет поддержки, редакция 11 (ноябрь 2012 г.)

Изменения в библиотеке поддержки v4:Пользовательский интерфейсДобавлена ​​поддержка вложенных классов фрагментов.

Как реализовать вложенный фрагмент, от разработчика Android

Теперь вы можете вставлять фрагменты внутри фрагментов.Это полезно для множества ситуаций, в которых вы хотите поместить динамические и повторно используемые компоненты пользовательского интерфейса в компонент пользовательского интерфейса, который сам по себе является динамическим и может использоваться повторно.Например, если вы используете ViewPager для создания фрагментов, которые смахивают влево и вправо и занимают большую часть экранного пространства, теперь вы можете вставлять фрагменты в каждую страницу фрагмента.

Здесь есть несколько ключей: getChildFragmentManager () и getParentFragment ()

0 голосов
/ 16 марта 2012

Моя идея состояла в том, чтобы использовать BaseActivity с макетом, содержащим панель поиска и FrameLayout, в котором я бы загружал фрагмент, соответствующий выбору навигации пользователя.

Если вы используете отдельные действия, а не пытаетесь объединить все в одно действие, вы не получите вложенные фрагменты.

0 голосов
/ 16 марта 2012

Разве вы не можете использовать панели вкладок в макете BaseActivity? Тогда в макете BaseActivity будут панель поиска, панель вкладок и фрагмент кадра. Если вы не хотите навигационную панель в каком-либо фрагменте, вы можете установить видимость View.GONE на навигационную панель.

...