Урок 110. Android 3. Fragments. DialogFragment - диалог

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

Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение damager82 » 17 окт 2012, 23:00

В этом уроке:
- работаем с DialogFragment


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

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение damager82 » 23 окт 2012, 17:54

Сообщения про папки и картинки перенесены сюда: viewtopic.php?f=33&t=1291
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

katrin
Сообщения: 4
Зарегистрирован: 25 окт 2012, 15:06

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение katrin » 21 ноя 2012, 00:41

Можете подсказать как передать значение переменной из одного DialogFragment в другой....Делала на основе вашего примера, у меня тест который собирает баллы. Через Intent не получается. Чего я не вижу?

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

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

katrin писал(а):Можете подсказать как передать значение переменной из одного DialogFragment в другой....Делала на основе вашего примера, у меня тест который собирает баллы. Через Intent не получается. Чего я не вижу?
Используйте setArguments для передачи данных в фрагмент, и getArguments для чтения.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

katrin
Сообщения: 4
Зарегистрирован: 25 окт 2012, 15:06

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение katrin » 22 ноя 2012, 20:15

Да спасибо, продвинулась, всё получилось А теперь как вернуть результат из fragment в основное MainActivity

katrin
Сообщения: 4
Зарегистрирован: 25 окт 2012, 15:06

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение katrin » 23 ноя 2012, 01:46

Забейте на мой вопрос, я решила отказаться от Fragment. Сделать через обычный Activity, иначе куда ни кинь всюду клин. Всем спасибо.

arreke
Сообщения: 7
Зарегистрирован: 09 окт 2012, 13:51

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение arreke » 11 дек 2012, 09:55

Имеется Fragment, на котором расположена кнопка, при нажатии на неё запускается DialogFragment.

Как сделать, чтобы при закрытии DialogFragment, срабатывало onResume для Fragment, или же чтоб запустилась как нибудь функция в Fragment, которая бы обновляла его содержимое?

Например, в стандартном примере:

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

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle("Title")
                .setPositiveButton(R.string.alert_dialog_ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doPositiveClick();
                        }
                    }
                )
                .setNegativeButton(R.string.alert_dialog_cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            ((FragmentAlertDialog)getActivity()).doNegativeClick();
                        }
                    }
                )
                .create();
    }
при нажатии на кнопку ОК сработает функция doPositiveClick() в активити, с которого запускался диалог, а как быть если диалог запускался с фрагмента?

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение Foenix » 05 фев 2013, 15:16

Пожалуйста, объясните, где-то я не догоняю. Почему любые диалоги, которые я делаю - не модальные? Пробую создать диалог ввода пароля в программу - жмешь в любое место, кроме диалогового окошка - он исчезает. Я где-то не поставила нужную "галочку"? :)
R.id.team

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

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение rezak90 » 05 фев 2013, 18:59

Olivka писал(а):Пожалуйста, объясните, где-то я не догоняю. Почему любые диалоги, которые я делаю - не модальные? Пробую создать диалог ввода пароля в программу - жмешь в любое место, кроме диалогового окошка - он исчезает. Я где-то не поставила нужную "галочку"? :)
конечно, если через стили то:

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

<item name="android:windowCloseOnTouchOutside">false</item>
если через код, то метод:

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

setCanceledOnTouchOutside(boolean cancel)
R.id.team
Политика на форуме запрещена

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение Foenix » 07 фев 2013, 17:55

Огромное спасибо! вы просто меня спасли..

Еще вопрос:
Я не пойму от чего зависит следующее. На активити или диалогефрагменте допустим есть поле ввода текста. Иногда у меня при вызове активити сразу же фокус перемещается в это поле и выскакивает клавиатура, а иногда просто без клавиатуры.
Я делаю в редакторе xml допустим так:

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

<EditText
        android:id="@+id/edPswrd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword" >

        <requestFocus />
    </EditText>
Я думала, что слово <requestFocus /> это и есть вызов клавы автоматом, т.к. поле долждно получать фокус, но нет, этого не происходит..
Опять, наверняка, не знаю про какую-нибудь галочку.
R.id.team

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

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение rezak90 » 07 фев 2013, 21:27

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

android:focusable="false"
что бы вьюха не получала фокус при инициализации
R.id.team
Политика на форуме запрещена

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение Foenix » 07 фев 2013, 22:02

Так это куда писать-то? у меня вообще-то есть диалог-фрагмент, там же нету вьюхи
А зачем тогда <requestFocus />?
я не очень поняла
R.id.team

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

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение rezak90 » 07 фев 2013, 23:03

<requestFocus /> это получить фоку текущей вьюшке, если же не хотите что бы она получала задайте атрибут edittext'y который я указал
R.id.team
Политика на форуме запрещена

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение Foenix » 07 фев 2013, 23:48

ура, работает! спасибо!!
R.id.team

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

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение neoksi » 09 апр 2013, 17:47

Ситуация следующая:
Передаю в конструктор моего DialogFragment одним из параметров lissener. При повороте экрана lissener не сохранить. Есть ли механизм у фрагментов позволяющий lissener вынести за скобку? И как им воспользоваться?

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение Foenix » 09 апр 2013, 18:29

neoksi писал(а):Ситуация следующая:
Передаю в конструктор моего DialogFragment одним из параметров lissener. При повороте экрана lissener не сохранить. Есть ли механизм у фрагментов позволяющий lissener вынести за скобку? И как им воспользоваться?
параметр или Bundle?
R.id.team

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

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение neoksi » 09 апр 2013, 18:47

Olivka писал(а):
neoksi писал(а):Ситуация следующая:
Передаю в конструктор моего DialogFragment одним из параметров lissener. При повороте экрана lissener не сохранить. Есть ли механизм у фрагментов позволяющий lissener вынести за скобку? И как им воспользоваться?
параметр или Bundle?
lissener - это реализация интефейса.

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение rezak90 » 09 апр 2013, 20:53

neoksi писал(а):Ситуация следующая:
Передаю в конструктор моего DialogFragment одним из параметров lissener. При повороте экрана lissener не сохранить. Есть ли механизм у фрагментов позволяющий lissener вынести за скобку? И как им воспользоваться?
из этих слов я так и не смог собрать все мысли воедино, осталось только Что?Где?Когда?
R.id.team
Политика на форуме запрещена

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение neoksi » 09 апр 2013, 21:17

Ладно, попробую по пунктам:
1) Создаю свой DialogFragment, к примеру SelectItemDialogFragment.
2) При создании sidf = new SelectItemDialogFragment(.... , new SelectItemDialogFragment.itemOnClickLissener(){ переопределенный метод }), одним из параметров передаю lissener (метод обратного вызова, реализация интерфейса).
3) Диалог отображается. Телефон при этом у меня в портретном режиме.
4) Поворачиваю телефон в land ориентацию.
5) Фрагмент запоминает все параметры для персоздания, но lissener я сохранить в Bundle не могу.
6) Активити пересоздается и создает все фрагменты, в том числе и диалог.
7) Диалог остался без реализации lissener, на его месте будет null.

Вопрос: как реализовать связь DialogFragment и метода в основной активности? Чтоб она сохранялась при пересоздании активити.

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

Re: Урок 110. Android 3. Fragments. DialogFragment - диалог

Сообщение Foenix » 09 апр 2013, 22:37

А.... Listener )))) извини, не поняла твое слово сразу

прикольно. надо свои диалоги повращать.
R.id.team

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

Ответить