Страница 1 из 4

Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 02 сен 2012, 23:00
damager82
В этом уроке:
- динамически работаем с фрагментами


Click here to read this article!

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 17 сен 2012, 20:14
Jane
Добрый день! Столкнулась с такой проблемой: Есть action bar, вкладки, в каждой вкладке должно быть много фрагментов, но при переходе с вкладки на вкладку происходит наложение фрагментов. Может быть, вы знаете, как лучше организовать работу с фрагментами в этом случае?

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 19 сен 2012, 09:21
damager82
Возможно вы используете add вместо replace. В этом случае фрагменты накладываются друг на друга.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 09 ноя 2012, 12:17
warner
Если пользоваться библиотекой support.v4 (чтобы приложение с фрагментами запускалось на старых андроидах (начиная с 1.6)) то при попытке скомпилировать пример из урока появится ошибка:
Type mismatch: cannot convert from android.app.FragmentTransaction to android.support.v4.app.FragmentTransaction
(даже при том, что в импортах стоит только import android.support.v4.app.FragmentTransaction;)
Обойти эту ошибку помогает использование getSupportFragmentManager()
и главная активити в таком случае дожна объявляться как public class MainActivity extends FragmentActivity

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 14 ноя 2012, 11:46
damager82
warner писал(а):Если пользоваться библиотекой support.v4 (чтобы приложение с фрагментами запускалось на старых андроидах (начиная с 1.6)) то при попытке скомпилировать пример из урока появится ошибка:
Type mismatch: cannot convert from android.app.FragmentTransaction to android.support.v4.app.FragmentTransaction
(даже при том, что в импортах стоит только import android.support.v4.app.FragmentTransaction;)
Обойти эту ошибку помогает использование getSupportFragmentManager()
и главная активити в таком случае дожна объявляться как public class MainActivity extends FragmentActivity
Да, код примеров не предназначен для запуска с библиотекой совместимости. Об этом будет отдельный урок.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 19 ноя 2012, 20:25
Foenix
Люди, если кто-то разбирался с примером на сайте девелоперов http://developer.android.com/reference/ ... gment.html
что такое там a_item? (поиском по страничке легко находится). Никак не пойму откуда взялось и почему на эту штуку меняется фрагмент?

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 20 ноя 2012, 13:53
Foenix
Что-то никто не посещает, но все равно спрошу по этому же примеру..http://developer.android.com/guide/comp ... ml#Example
там написано, что один и тот же код можно запускать в виде фрагмента и в виде активити. Так вот мало того, что данный пример устарел, у меня еще он категорически ругается на попытку запустить новый инстанс фрагмента в качестве активити вот тут:

Код: Выделить всё

   // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            >>>>startActivity(intent);

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 21 ноя 2012, 10:15
damager82
Olivka писал(а):Люди, если кто-то разбирался с примером на сайте девелоперов http://developer.android.com/reference/ ... gment.html
что такое там a_item? (поиском по страничке легко находится). Никак не пойму откуда взялось и почему на эту штуку меняется фрагмент?
Походу баг. Здесь он тоже фигурирует - http://developer.android.com/guide/comp ... ments.html
А в указанном ими файле FragmentLayout.java, который у меня нашелся, нет никакого a_item.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 21 ноя 2012, 10:17
damager82
Olivka писал(а):ругается на попытку запустить новый инстанс фрагмента в качестве активити вот тут:

Код: Выделить всё

   // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailsActivity.class);
            intent.putExtra("index", index);
            >>>>startActivity(intent);
DetailsActivity - это у вас Acvtivity? В манифесте прописали его?
Какую конкретно ошибку выдает?

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 21 ноя 2012, 11:13
Foenix
Уже разобралась. Затупила сильно! Мне нужен был целый класс активити еще один, чтобы завернуть в него вызов этого куска фрагмента.

Мне вот еще что интересно.. а у фрагмента может быть свое меню? кнопочки там сверху и все такое..

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 22 ноя 2012, 09:18
damager82
Olivka писал(а):у фрагмента может быть свое меню? кнопочки там сверху и все такое..
Он может свои пункты в ActionBar добавлять. Урок 112.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 22 ноя 2012, 11:29
Foenix
Ага, спасибо! уже читаю

Почитала, кстати, что след. урок будет про v4. Уже интересно, т.к. у меня есть активити с фрагментами, с которыми пришлось помучиться, в частности потому, что нужно было импортировать v4. Зачем тогда нужна обычная - не ясно, может, для старых версий..? В общем, жду.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 28 ноя 2012, 23:31
Foenix
Сории, постирала сообщения. Сделала.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 29 ноя 2012, 00:46
Foenix
;)

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 09 фев 2013, 18:30
Snakebyte
Подскажите, есть основной лэйаут

Код: Выделить всё

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context=".Quiz" >

    <FrameLayout
        android:id="@+id/headerFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >

    </FrameLayout>

    <FrameLayout
        android:id="@+id/mainFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true" >

    </FrameLayout>

    <FrameLayout
        android:id="@+id/footerFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" >

    </FrameLayout>

</RelativeLayout>
Когда в центральный фрагмент помещаю контейнер с ListView

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    android:scrollbars="horizontal" >

    <ListView
        android:id="@+id/groupsList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:scrollbars="horizontal" >

    </ListView>

</RelativeLayout>
содержимое наползает на верхний и нижний фрагменты.
Как сделать, чтобы список обрезало по границе центрального фрагмента?

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 14 фев 2013, 13:25
damager82
Добавьте в mainFragment, что он должен быть ниже (below) чем headerFragment и выше (Above) чем footerFragment.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 14 фев 2013, 15:15
Snakebyte
Пробовал так, центральный фрагмент вообще не отображается.
Зная высоту нижнего фрагмента, задал центральному bottom margin, все красиво, но вылезает другой глюк - при прокрутке списка невидимые до этого элементы отрисовываются с содержимым спрятавшихся при прокрутке.

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 18 фев 2013, 15:56
ibop
А вот подскажет мне кто, пытаюсь всё воссоздать по образцу, но немного под свой проект запилить. Но getSupportFragmentManager() возвращает всегда null... Походу не срабатывает инфлэйт. Но не могу понять, в чём дело :cry:
Соответственно, если пытаюсь получить доступ к любым вьюшкам фрагмента - то вылетает Exception, так как к самому фрагменту я так и не подключился

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 24 фев 2013, 23:54
lacabomba
Метод add не позволяет повторно загрузить тот же фрагмент (например, если повторно нажать кнопку "Add", то приложение вылетает с ошибкой и в логах пишет что фрагмент уже загружен). Мудрил мудрил с проверкой и понял, что проще вместо add использовать replace. Логика у replace судя по описанию такая, что сначала из контейнера все удаляется, а потом загружается нужный фрагмент. По-моему, одни плюсы: не будет наслоений, не нужно городить проверки всякие. Может есть какой то более правильный способ?

Re: Урок 105. Android 3. Fragments. Динамическая работа

Добавлено: 25 фев 2013, 00:46
rezak90
если вы внимательно посмотрите туториалы и семплы то увидите что везде используется replace так как он замещает фрагмент фрагментом и предыдущий уходит в "сон" тем самым не давай по себе кликать