Alexey 🇪🇸
погоди, так фрагмент же живёт дольше. Вот если бы фрагмент удерживал лисенеры, было бы плохо. Но всё наоборот
не смотри... мы засетали клик листенер в text_search. Этот листенер по сути иннер класс, который имеет ссылку на фрагмент, потому что обращается к полю класса фрагмента. Когда мы уничтожаем вьюхи в ondestroyview считай text_search типо уничтожается, но этот кликлистенер не даст gc собрать text_search. Фрагмент то будет продолжать жить в бэк стеке.
Andrew
Ой, Parcel
Что ты хочешь сделать? Какая бизнес-задача?
Alexey 🇪🇸
ну ничего, вместе с ним будут жить несколько байт листенера. Потом все дружно пойдут под нож.
а потом фрагмент вытаскивается из бэк стека и у него опять создается вьюхи с новым листенером. Старая вьюха остается висеть не?
Alexey 🇪🇸
как насчёт не?)
если не, то почему?
Andrew
если не, то почему?
потому что Root-ссылка больше не существует
Max
Что ты хочешь сделать? Какая бизнес-задача?
Я хочу лист со своими объектами перекинуть с Активити во фрагмент через newInstance, класс, объекты которого я хочу передать имплементирует Parcelable, но члены его класса имеют не примитивный тип, поэтому я не знаю как через Bundle во фрагменте передать этот list в OnCreate фрагмента
Alexey 🇪🇸
text_search кстати из котлин синтетиков
Alexey 🇪🇸
потому что Root-ссылка больше не существует
так вроде же получается создается новая вьюха и создается к ней новый листенер со ссылкой на этот фрагмент.
Max
Нельзя так делать.
А как тогда?..
Mike
если не, то почему?
кто кого удерживает?)
Александр
потому что Root-ссылка больше не существует
Вот тут чёт сложна стало. Насколько я знаю, трабл в том что анонимный класс будет хранить ссылку на сам фрагмент. Это подразумевалось под рутом?
Mike
А как тогда?..
окей гугл, как реализовать parcelable?
Max
окей гугл, как реализовать parcelable?
Я знаю как его в классе реализовать, но вопрос: ответ выше означает, что это неправильно или что это вообще нельзя сделать
Andrew
А как тогда?..
Нужно передать в активити информацию о том, как ей нужно сгенерировать список. Например "список сохранён в базе с таким айдишником / в префсах / в инстансе". Фрагмент при генерации должен вызывать метод коллбека от активити "дай мне список". Активити достаёт список где она там его хранит или возвращает пусто.
Alexey 🇪🇸
кто кого удерживает?)
хмм вроде кликлистенер. или погоди я не прав.... 🤔
Anonymous
Миловзорова М Н Учебное пособие.pdf
Alexey 🇪🇸
кто кого удерживает?)
О, погоди, то есть не удерживает листенер ничего потому что вьюха вся уничтожается и листенер вместей ней?
Vadim
Кто может подсказать почему у меня не вызывается destroyItem в адаптере, учитывая что я просто удалил метод getItemPosition
Andrew
хмм вроде кликлистенер. или погоди я не прав.... 🤔
Лёша, предыдущий фрагмент умер вместе со всем содержимым. При возобновлении работы будет создан новый. Всё.
Alexey 🇪🇸
он в бэкстек уходит
Alexey 🇪🇸
у фрагмента не такой лайфсайкл как у активити, потому и все сложнее
Andrew
Хм, неплохо! Спасибо!
Основная суть - фрагмент не должен ничего сам доставать ни из никаких бандов. Он должен в onCreate у кого то попросить (в идеале у активити) через коллбек какие ему нужны данные.
Andrew
да не умирает фрагмент
ну тогда же onCreate не вызывается )
Andrew
а раз вызывается, значит умирает
Alexey 🇪🇸
ну тогда же onCreate не вызывается )
блин, oncreateview и ondestroyview же
Alexey 🇪🇸
ну тогда же onCreate не вызывается )
все так, когда фрагмент вытаскивается из бэк стека у него oncreateview вызывается
Александр
Я чот запутался. Фрагмент уходит в бекстек, а что происходит с экземпляром анонимного класса, который был создан в результате навешивания листенера? Он ж хранит ссылку на внешний класс(на фрагмент, получается). Чтобы этот класс убить(и отпустить фрагмент), нужно снять листенер, иначе никак же.
Александр
И жц этого экземпляра вроде как к фрагменту никак не привязано.
Andrew
wtf, почему ты так считаешь?
Потому что фрагменты имеют свойство оживать самостоятельно и в этот момент всё что происходит в рукописном getInstance не вызывается. Краш - грусть - слёзы. А когда фрагмент научили просить данные у родителя / репозитория / когонибудь то всё будет отлично.
Hovhannes
вообще-то всё что было передано в аргументах - восстановится, разве нет?
Тебе не нужно думать об аргументах фрагмента если ты из туда не передаешь
Mike
Учту, благодарю
ниже объяснили, что это неверно
pavelkostyukov
подскажите на что ругается?
pavelkostyukov
[databinding] {"msg":"Only one layout element with 1 view child is allowed. /Users/pavelkostukov/Project/-android-app/app/src/main/res/layout/fragment_support.xml has 0","file":"/Users/pavelkostukov/Project/-android-app/app/src/main/res/layout/fragment_support.xml","pos":[]}
Max
ниже объяснили, что это неверно
Ниже или выше? Не вижу
Mike
Ниже или выше? Не вижу
https://t.me/android_ru/635624
Konstantin
а что там куда у шита течёт?
на самопальных вьюшках протекает )
Mike
на самопальных вьюшках протекает )
конкретнее? Чем самопальные отличаются от обычных-то?
Max
https://t.me/android_ru/635624
Так что, колбэк не очень подходит?
Konstantin
конкретнее? Чем самопальные отличаются от обычных-то?
ну ты юзаешь либо то что тебе дали в виде боттом щит диалог фрагмент, либо можешь сам с любой вьюшкой то же самое сделать, поддерживать фоновый вью, поддерживать лаяут диалога, прятать там что надо и т.п., it depends, если не снимать колбек самому то протекает почему то
Mike
Так что, колбэк не очень подходит?
Ну если работает, то и ладно, но он привязывает к классу интерфейса.
Max
Ну если работает, то и ладно, но он привязывает к классу интерфейса.
Ну смотри, я просто не знаю как лучше. Мне надо передать с Активити лист со своими объектами в два фрагмента, сначала думал через Parcelable, не знаю..
--------
Ну смотри, я просто не знаю как лучше. Мне надо передать с Активити лист со своими объектами в два фрагмента, сначала думал через Parcelable, не знаю..
имхо - самая большая ошибка новичков - размышления на тему как лучше и попытки сразу сделать максимально правильно. Только путь неверных решений увеличивает твой опыт.
Max
А откуда берёшь лист?
У меня фоновый поток, создаю лист в Активити, я решил, что вызывать этот поток из каждого фрагмента - не очень
Andrew
пасиб, выручил
Ну так я тоже самое сказал) фрагмент должен уметь попросить данные для работы, а не получать рукописные аргументы
Max
Создаёшь на основе чего? Вроде Parcelable вполне подходит.
Что имеешь в виду под основой? У меня объекты содержат Drawable, я хотел его засунуть в Parcel, но видимо тип Object писать нельзя..
--------
https://t.me/android_ru/635622
но аргументы восстанавливаются
Mike
https://t.me/android_ru/635622
ты, вероятно, путаешь аргументы функции с аргументами фрагментов
Andrew
но аргументы восстанавливаются
Нет, не восстанавливаются.
Max
тогда нужно научить дроваблы сохраняться в Parcel
О, так можно? Свои дроваблы писать? 😄😄😄
Konstantin
https://developer.android.com/reference/android/support/v4/app/Fragment.html#setarguments The arguments supplied here will be retained across fragment destroy and creation.
R
Да