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

Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 12:13
kym
Смысл в следующем - есть активити PRESENTATION с набором фрагментов и различными значениями переменными. Назовём её "А".
Из этой активити "А" необходимо вызывать новую активити PRESENTATION в которой будет свой набор фрагментов и значениями переменных. Назовём её "В"
Считал что достаточно просто написать intent и стартовать активити, но есть проблема.
Вторая активити, которая "В" отображает свой набор фрагментов, замечательно работает, но после того, как она уничтожается кнопкой BACK и осуществляется возврат к активити "А" у активити "А" в переменной mContext хранится уже не её контекст, а контекст уничтоженной "В". Аналогично и для mViewPager - его содержимое заменено на содержимое В.mViewPager.

Видимо я не допонимаю как работает создание нового инстанса активити - почему сохраняется контекст вызванной второй активити и содержимое её переменных?

Re: Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 13:16
kym
Временно ничего глупее чем создать дубль класса с другим именем и вызывать его - не придумал.

Параметры в интент не помогли - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

Re: Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 13:28
kym
Добавил пояснение - стартую активити с тем же самым именем, то есть туже.
Пока сделал костыли - создал дубль активити с другим именем и стартую его.

Re: Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 14:45
Foenix
вместо дублей активити, вызывающих "сами себя" используют фрагменты и 1 активити.

Re: Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 16:40
altwin
kym писал(а):Смысл в следующем - есть активити PRESENTATION с набором фрагментов и различными значениями переменными. Назовём её "А".
Из этой активити "А" необходимо вызывать новую активити PRESENTATION в которой будет свой набор фрагментов и значениями переменных. Назовём её "В"
Считал что достаточно просто написать intent и стартовать активити, но есть проблема.
Вторая активити, которая "В" отображает свой набор фрагментов, замечательно работает, но после того, как она уничтожается кнопкой BACK и осуществляется возврат к активити "А" у активити "А" в переменной mContext хранится уже не её контекст, а контекст уничтоженной "В". Аналогично и для mViewPager - его содержимое заменено на содержимое В.mViewPager.

Видимо я не допонимаю как работает создание нового инстанса активити - почему сохраняется контекст вызванной второй активити и содержимое её переменных?
зачем вообще вторая activity?

Re: Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 17:17
kym
altwin писал(а): зачем вообще вторая activity?
В активити содержится набор фрагментов который зависит от содержимого передаваемого ей на вход. Грубо говоря подаётся набор тем для презентаций и текущая тема презентации. Переход между темами делается внутри этой же активити.
Но - бывает ситуация, когда необходимо показать презентацию не из списка полученного на вход. Думал вызывать активити второй раз - в ней показать презентацию не из списка, потом финишить её и возвращаться к первой активити.

Хотел сделать через другие костыли - из первой "А" вызывать некую временную активити "В". Эта временная активити "В" получает набор параметров через intent, вызывает новую "A". Но эти костыли почему-то не сработали. После финиша второй "А" и дестроя "В" значения переменных в первой "А" всё равно изменены на значения из второй "А".

Хотя вроде как в схеме А -> B -> A ничего противоестественного нет.

Re: Непонятки при создании нового инстанса активити

Добавлено: 03 июл 2014, 17:49
KamiSempai
Переменные случаем не "static"?

Re: Непонятки при создании нового инстанса активити

Добавлено: 04 июл 2014, 04:32
kym
KamiSempai писал(а):Переменные случаем не "static"?
Таак, а это отличный вопрос. По ходу в этом дело, отпишусь.

Re: Непонятки при создании нового инстанса активити

Добавлено: 04 июл 2014, 07:17
kym
KamiSempai писал(а):Переменные случаем не "static"?
Да, большое спасибо, проблема была именно в этом. Сейчас спокойно создаются две активити "А" -> "А" с разным контекстом и значениями переменных. Проблема была в том, что классы PageAdapter и Fragment были внутренними классами активити и соответственно они сами и переменные для работы с ними все были static.
Сейчас разнёс это хозяйство по разным классам и всё работает баз каких либо костылей.
Спасибо.

Re: Непонятки при создании нового инстанса активити

Добавлено: 04 июл 2014, 11:21
altwin
kym писал(а):
altwin писал(а): зачем вообще вторая activity?
В активити содержится набор фрагментов который зависит от содержимого передаваемого ей на вход. Грубо говоря подаётся набор тем для презентаций и текущая тема презентации. Переход между темами делается внутри этой же активити.
Но - бывает ситуация, когда необходимо показать презентацию не из списка полученного на вход. Думал вызывать активити второй раз - в ней показать презентацию не из списка, потом финишить её и возвращаться к первой активити.

Хотел сделать через другие костыли - из первой "А" вызывать некую временную активити "В". Эта временная активити "В" получает набор параметров через intent, вызывает новую "A". Но эти костыли почему-то не сработали. После финиша второй "А" и дестроя "В" значения переменных в первой "А" всё равно изменены на значения из второй "А".

Хотя вроде как в схеме А -> B -> A ничего противоестественного нет.
Презентация не из списка - это id в базе? Т.е. фрагмент наполняется содержимым в зависимости от состояния, которое привязанно к id презентации... Все уже показанное находится в кеше и берется оттуда, ну а если его в кеше нет - генерируется фрагмент на основе стилей, контента и чего угодно привязанного к id... я конечно определенно что -то не понимаю... но вопрос нафига 2 активити остается...

Re: Непонятки при создании нового инстанса активити

Добавлено: 04 июл 2014, 11:37
kym
altwin писал(а): Презентация не из списка - это id в базе? Т.е. фрагмент наполняется содержимым в зависимости от состояния, которое привязанно к id презентации... Все уже показанное находится в кеше и берется оттуда, ну а если его в кеше нет - генерируется фрагмент на основе стилей, контента и чего угодно привязанного к id... я конечно определенно что -то не понимаю... но вопрос нафига 2 активити остается...
На вход активити подаётся json и набор параметров, в соответствии с которыми этот json парсится и создаются фрагменты. Каждый фрагмент это лист презентации. В одном json может быть не одна, а несколько презентаций идущих в определённом порядке (формирование фрагментов происходит для каждой презентации). Все эти презентации запускаются в одном активити. Для каждой презентации необходимо учитывать время показа и вводимые в процессе данные.

Но есть следующий момент - для всего списка презентаций который получается при парсинге json есть некий набор дополнительных презентаций. Для каждой темы презентации это свой набор. Необходимо чтобы в любой момент показа можно было переключится на любую презентацию из дополнительного списка, учесть по ней время показа и вернуться к показу набора презентаций (тот же слайд, те-же данные). Вот. Можно конечно сохранять состояние, формировать фрагменты для дополнительной, потом проверяя что это дополнительная при нажатии back возвращать состояние. Но мне этот подход нравится меньше.