мне нужно обратиться к вьюхе из активити находясь в адаптере, как это реализовать?
Ну через интерфейс обычно
а какие ещё есть вариации?
Держи в голове такой концепт -- все строится деревом. Один класс создает другой, а последний создает еще один. Из этого вытекает как раз возможность передавать в создаваемые классы средство связи с другими. Складывать все в статики однажды выстрелит тебе в ногу, ибо у многих компонентов ограниченное время жизни, которое нужно всегда брать в расчет.
Ну можно передать функцию в конструктор адаптера, по сути тоже самое только меньше кода
что более чище?
передать функцию (лямбду) если ты в котлине
или можно костыльно, (context as MyActivity).some()
в котлине, но с лямбдами такого плана ещё максимально не знаком)
Предварительно положи в адаптер инстанс активити, и обращайся потом к ней из адаптера сколько хочешь.
Больше ссылок на Активити… что бы наверняка что-то да утекло
Это уже другой вопрос. Кста, чёт не могу с лёту сообразить, дайте мне пж какой - нибудь реальный кейс, при котором из - за наличия активити в адаптере что - то реально утекает.
Как Оганнес написал, тут вопрос не в конкретном кейсе, а в том, что если считать это вариантом, то выходит что можно пихать что угодно и куда угодно)
именно поэтому и есть передача "беременна в 16 "
адаптер лежит в статическом поле
Если это будет работать и ничего не будет течь, то, в абстрактной ситуации в ваакуме, можно пихать что угодно и куда, да.
И индусы
есть вариант создать хэш таблицу и в onBindViewHolder туда засовывать твой вью холдер по позиции например (если они у тебя не меняются постоянно, если меняются, лучше другой ключ придумать). Тогда можно будет из активности обращаться к вью холдеру нужному. Если айтем адаптера у нас будет вне видимости в списке, вью холдер просто вернет null
поправка индусы кодеры
Да, сори, что бы правильно поняли)
И потом случай сколько WTF в минуту будет исходить из комнаты ревьювера таких ПР
Вовремя занулил ссылку в адаптере, PROFIT. Говоря конкретно про случай того челика, адаптер может лежать в статическом поле, а может не лежать, об этом ничего не известно, так что совет валиден.
Это уже не ваше дело ок. Работает? Работает.
звучит как кейс когда на фрилансе отдаешь заказчику говнокод : работает, да. и все
С таким подходом и до индусов кодеров за 3-4 бакса в час не далеко)
не только на фрилансе так-то
если во время ссылки занулять естественно не будет утечек . . .
Не вижу проблем собсна, если всё действительно работает. Если спуститься с небес на землю и уйти от абстрактных рассуждений из разряда "ох говнокод о божечки кошечки" и вернуться конкретно к тому челу, то станет очевидно, что там чел не может не говнокодить, ему скиллов не хватает, он поэтому говнокодит. Апнет скилзы, не будет говнокодить, а пока - ну, шо поделать.
Вопрос исчерпан получается?
С каким подходом? Не вижу ничего плохого в том, чтобы сначала сделать работающий говнокод по мере своих сил, а опосля уже делать "правильно".
тогда вопрос. ты пользуешься адаптером из библиотеки, который хранит активити в приватном статик поле. как ты его обнулишь
Никак. А причём тут это?
Жуть какая. Извне адаптера залезать в его вью холдеры 😱
а если нужно контролировать анимацию загрузки? все время нотифаить каждый айтем получится хрень
на счет этого. если говнокодить - тогда зачем париться и об утечках?
Какая связь между адаптером и загрузкой где-то чего-либо??? А если нужно контролировать полет в космос и посадку на Плутон?
Я смотрю на это с точки зрения бизнеса, а не отдельно взятого разработчика. Когда ты будешь хранить Активити в адаптерах, а адаптеры в вью моделях, а потом уйдёшь с проекта по каким либо причинам так и не успев сделать нормально и оставив за собой то, что работает, но только ты знаешь как, то мне будет важно только одно - есть проект, который работает вроде как, но мне придётся потратить кучу денег и времени на то, что бы продолжить расширяться, добавлять функционал или элементарно держаться на рынке
Кроме того, активити в адаптере намертво их связывает и не даёт возможность использовать тот же адаптер в другом месте.
ну мне в каждом айтеме нужно показывать анимацию которая зависит от загрузки - как в чате например я загружаю какой то файл в сообщении. Как это реализовать другим способом?
Тут вопрос не в этом, это я как пример того, что вроде и работает, но по факту решение отвратительное
Согласен
Из ui дергать метод адаптера, который делает notifyItemChanged(). Прогресс держать в качестве свойства адаптера.
Есть конкретный вопрос и конкретный ответ на него, можно пж не уходить в дебри какие - то уходить, мне это напоминает какое - то вертение ужа на сковородке))0
"ой зачем вы мозг парите. просто дайте ответ"
я так и сделал изначально, получилась хрень. Когда итем нотифаится, выглядит это очень топорно
Например, сделать метод в адаптере: показать или убрать прогресс для итема с id таким-то. Залезать напрямую во вью - это большой вам привет от ООП и инкапсуляции как минимум.
хорошо, не странная. довольно типичная. просто оставлю это так)
В плане реализации или того, как визуально выглядит меняющийся item?
Это как вчера приходил человек, хотел срочно узнать, как из vector drawable достать tint. На вопрос "зачем?" ответил: надо, а не знаете, так молчите.
Я с проблемой "тайных знаний" в своём проекте сталкиваюсь каждый день, и всё то что ты описал мне прекрасно понятно. Я и сам являюсь носителем таких знаний, hehmda. Не нужно драматизировать пж. Совет о том чтобы пихнуть активити в адаптер решает задачу? Решает, пусть и очень хуёво. Не нужно иметь семь пядей во лбу, чтобы разобраться с этим кодом и в случае чего нормально его переписать. Бизнес от этого, вероятно, сильно не пострадает, т.к для него, имхо, в первую очередь важно то чтобы код работал, а не был дохуя красивым.
Так и есть, se la vi.
Syntax error, expected: C'est la vie. 😏
а как он работает не волнует?🌚 или то, что если чел в отпуск уйдет или уволиться. а след. челу заниматься
catch(e: PoxuiException)
Жаль, компилятору такого не скажешь. Жизнь сразу заиграла бы новыми красками 😁
Решение с ссылкой в адаптере в общем случае будет работать нормально. Я не понимаю о чём ты. Ну уйдёт чел в отпуск, ну унесёт с собой тайные знания, да. Что уж тут поделать. Такое, в моём понимании, везде есть, на всех мало - мальски больших проектах, и было бы, даже если бы проекты писали одни синьоры помидоры, которые писали бы наиэлитнейший код. Ты же не думаешь, что если я наипиздатейше написал фичу и ушёл в отпуск, то любой чел, которому нужно будет в этой фиче сделать правки, изи в ней разберётся просто потому что я её написал на отличненько?
возможно не изи, но точно намного легче
Вот дали тебе таску сделать правку в фиче, а там у чела активити в адаптере. И что, всё, пизда тебе? Реквестируем 2 дня на разбирательства, посоны.
почему ты привязываешься к этому кейсу? а если более сложный кейс? у меня лично были случаи, где я вот вот думал закончил багу\фичу, но из-за 1 появившегося милипиздрического бага, который трудно убрать из-за плохого архитектурного решения, мне пришлось дохрена переписывать
Зависит. Может быть, проще будет оставить как есть, а может быть - отрефачить.
и да, если он напишет вообще половину логику самого активити в адаптере. тогда, возможно, придется реквестировать🌚
Потому что я не хочу уходить в абстрактные рассуждения, что тут не понятного то. Я вообще не понимаю, как вы к решению конкретного вопроса притянули каких - то челиков, которые потом когда - то будут смотреть какой - то код и почему - то ахуеют от такого поворота событий. Они обязательно ошалеют от активити в адаптере, едрить - кудрить. Какое - то приплетение уровня 99. Про это: из-за плохого архитектурного решения, мне пришлось дохрена переписывать я прекрасно знаю, и впринципе я в своей команде поначалу пытался захуесосить тех кто писал хуйню, однако на практике меня по кд разворачивали с моими предъявами, просто потому что решения могут быть плохими, но рабочими. Написали херню, просто потому что вот так сложилось. Не хватило времени, мб опыта, мб ошиблись и не так задачу поняли, не предусмотрели что - то, хз. Это практика, а не рассуждения какие - то. Работает же? Работает. Будет время - перепишем, пока не можем. Говнокод случается. У того конкретного челика будет говнокод, потому что ему не хватает понимания того, что обращаться к активити из адаптера це, в среднем, плохо. Ок, го объясни ему как надо написать. Потратишь время на это? Думаешь он поймёт? Там чел хотел в статик поле активити сунуть, ёпта, полагаю у тебя проблемки возникнут с его обучением. Хз короче, все при своём останутся. Имхо, вы просто забыли что значит "быть вкатывающимся", у вас глаз зашорен опытом.
Обсуждают сегодня