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

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 02 сен 2012, 23:00

В этом уроке:
- динамически работаем с фрагментами


Click here to read this article!
Последний раз редактировалось damager82 23 май 2017, 22:07, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Jane
Сообщения: 6
Зарегистрирован: 11 июл 2012, 12:30

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

Сообщение Jane » 17 сен 2012, 20:14

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

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 19 сен 2012, 09:21

Возможно вы используете add вместо replace. В этом случае фрагменты накладываются друг на друга.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

warner
Сообщения: 2
Зарегистрирован: 31 авг 2012, 17:58

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

Сообщение warner » 09 ноя 2012, 12:17

Если пользоваться библиотекой 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

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 14 ноя 2012, 11:46

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
Да, код примеров не предназначен для запуска с библиотекой совместимости. Об этом будет отдельный урок.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 19 ноя 2012, 20:25

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

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 20 ноя 2012, 13:53

Что-то никто не посещает, но все равно спрошу по этому же примеру..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);
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 21 ноя 2012, 10:15

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

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 21 ноя 2012, 10:17

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? В манифесте прописали его?
Какую конкретно ошибку выдает?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 21 ноя 2012, 11:13

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

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

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 22 ноя 2012, 09:18

Olivka писал(а):у фрагмента может быть свое меню? кнопочки там сверху и все такое..
Он может свои пункты в ActionBar добавлять. Урок 112.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 22 ноя 2012, 11:29

Ага, спасибо! уже читаю

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

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 28 ноя 2012, 23:31

Сории, постирала сообщения. Сделала.
Последний раз редактировалось Foenix 29 ноя 2012, 01:15, всего редактировалось 1 раз.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 29 ноя 2012, 00:46

;)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Snakebyte
Сообщения: 20
Зарегистрирован: 20 дек 2012, 08:18

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

Сообщение Snakebyte » 09 фев 2013, 18:30

Подскажите, есть основной лэйаут

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

<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>
содержимое наползает на верхний и нижний фрагменты.
Как сделать, чтобы список обрезало по границе центрального фрагмента?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 14 фев 2013, 13:25

Добавьте в mainFragment, что он должен быть ниже (below) чем headerFragment и выше (Above) чем footerFragment.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Snakebyte
Сообщения: 20
Зарегистрирован: 20 дек 2012, 08:18

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

Сообщение Snakebyte » 14 фев 2013, 15:15

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

ibop
Сообщения: 3
Зарегистрирован: 18 фев 2013, 15:48

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

Сообщение ibop » 18 фев 2013, 15:56

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

lacabomba
Сообщения: 4
Зарегистрирован: 24 фев 2013, 23:21

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

Сообщение lacabomba » 24 фев 2013, 23:54

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 25 фев 2013, 00:46

если вы внимательно посмотрите туториалы и семплы то увидите что везде используется replace так как он замещает фрагмент фрагментом и предыдущий уходит в "сон" тем самым не давай по себе кликать
R.id.team
Политика на форуме запрещена

Ответить