169 похожих чатов

А зачем контекст вью байндингу?

63 ответов

19 просмотров

мне нужно обратиться к вьюхе из активити находясь в адаптере, как это реализовать?

Artem- Автор вопроса

Ну через интерфейс обычно

а какие ещё есть вариации?

Держи в голове такой концепт -- все строится деревом. Один класс создает другой, а последний создает еще один. Из этого вытекает как раз возможность передавать в создаваемые классы средство связи с другими. Складывать все в статики однажды выстрелит тебе в ногу, ибо у многих компонентов ограниченное время жизни, которое нужно всегда брать в расчет.

Artem- Автор вопроса

Ну можно передать функцию в конструктор адаптера, по сути тоже самое только меньше кода

что более чище?

передать функцию (лямбду) если ты в котлине

или можно костыльно, (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. Про это: из-за плохого архитектурного решения, мне пришлось дохрена переписывать я прекрасно знаю, и впринципе я в своей команде поначалу пытался захуесосить тех кто писал хуйню, однако на практике меня по кд разворачивали с моими предъявами, просто потому что решения могут быть плохими, но рабочими. Написали херню, просто потому что вот так сложилось. Не хватило времени, мб опыта, мб ошиблись и не так задачу поняли, не предусмотрели что - то, хз. Это практика, а не рассуждения какие - то. Работает же? Работает. Будет время - перепишем, пока не можем. Говнокод случается. У того конкретного челика будет говнокод, потому что ему не хватает понимания того, что обращаться к активити из адаптера це, в среднем, плохо. Ок, го объясни ему как надо написать. Потратишь время на это? Думаешь он поймёт? Там чел хотел в статик поле активити сунуть, ёпта, полагаю у тебя проблемки возникнут с его обучением. Хз короче, все при своём останутся. Имхо, вы просто забыли что значит "быть вкатывающимся", у вас глаз зашорен опытом.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта