Можете ли вы построить макеты внутри фреймворков в сотах? - PullRequest
0 голосов
/ 21 июня 2011

Я немного новичок в Android и очень плохо знаком с Фрагментами. Я пытаюсь перенести приложение с Активности на Фрагменты (ну, Активности + Фрагменты) для Сота. Прежде чем перейти к экранам планшета, мы хотим, чтобы наше приложение работало с библиотекой совместимости фрагментов для устройств 1.6+. Я прочитал документацию и примеры от Google, и ничто явно не говорит, что я могу или не могу сделать следующее, но это не работает для меня.

Первый портированный экран - это экран запуска, на котором есть файл макета, который называется frag_splash.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/splash_background">
    <fragment class="...StartupFragmentLayout$StartupFragment"
        android:id="@+id/fragStartup" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/debugText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:text="DEBUG ON"
            android:gravity="center"
            android:textSize="35sp"
            android:textColor="@color/blue_text"
            android:textStyle="bold"
            android:shadowColor="#FFFFFF"
            android:shadowRadius="2"/>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.4"
            android:gravity="bottom">
           ...
    </fragment>
</LinearLayout>

Однако это не работает. Я получаю сообщение о том, что StartupFragmentLayout $ StartupFragment не создал представление. Я начинаю подозревать, что не могу ничего вкладывать в <fragment>, так как я не видел, чтобы это было сделано ни в какой документации или примерах. Это правильно, или моя проблема в чем-то другом?

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Из документации не ясно, можно ли иметь дочерние представления в <fragment>. Поскольку ни один из образцов фрагментов не делает этого, то я подозреваю, что это не тот способ, которым они предназначены для использования. Вы можете попробовать изменить <fragment> на <FrameLayout> и добавить фрагмент во время выполнения, если вы действительно этого хотите, чтобы увидеть, работает ли это.

Тем не менее, я думаю, что ваше лучшее решение - поместить дочерние представления в отдельный файл макета, а затем в onCreateView накачать в контейнер фрагмента с помощью:

final View iv = inflater.inflate(R.layout.favourites, container, false);

Я не думаю, что вы потеряете что-либо в результате этого.

1 голос
/ 22 июня 2011

Просто чтобы связать это, фрагменты не могут иметь детей в макетах. PJL предлагает правильный подход. Расположение внутри фрагмента должно быть указано в отдельном XML-файле. Затем вы можете внедрить этот макет в дерево представлений, возвращая его из фрагментов метода onCreateView.

...