Anonymous
Вау, супер совет (нет)
если можешь подсказать буду благодарен
ᛖᚹᛋᛁᚱ
Вау, супер совет (нет)
Предложи лучше
ᛖᚹᛋᛁᚱ
И контекст возьми с вьюшки
Dmytro
Тебе же сказали уже, оставь что-то одно, глай или пикассо. А для начала убери оба и попробуй картинку с ресурсов засетить
Anonymous
Тебе же сказали уже, оставь что-то одно, глай или пикассо. А для начала убери оба и попробуй картинку с ресурсов засетить
я и говорю,что с ресурсов все моментально, сначала брал glide он не помогал, потом пикассо, тоже не вариант
Dmytro
я и говорю,что с ресурсов все моментально, сначала брал glide он не помогал, потом пикассо, тоже не вариант
тогда проблема в том, как ты работаешь с глайдом/пикассо, скорее всего, как и сказали выше, проблема с контекстом, где ты его инициализируешь. создай метод у вьюхоледра, где ты будешь загружать картинку, а там itemView возбми контекст
Dmytro
или почитай бест практис по использованию глайда в ресайклере
Anonymous
типо такого?
Anonymous
и мне вызывать его при бинде
Kotor
Привет. А нет ли хорошей статьи как оптимизировать андроид студио? Около 2х недель назад начал буксовать на билдах, при этом у коллеги все по прежнему быстро собирается (то есть проблема не в проекте), откатил студио, не помогло, выделил больше RAM - тоже не помогло, инвалидировал все настройки - не помогло. В тупике.
Kotor
тестишь на реальном устройстве? у коллеги такие же параметры?
Да на рельном. У него CPU чуть-чуть получше, а RAM тот же, но просто раньше у нас обоих быстро собиралось, а сейчас у меня 2.5 минуты каждый раз, даже если меняшь строчку в проекте
Ivan
В onClickListener для RecyclerView кто-нибудь делает проверку на NO_POSITION?
Dmytro
а подскажите кто-то может подсказать по dynamic-feature ошибка Expected configuration ':featuret:debugCompileClasspath' to contain exactly one file, however, it contains no files. ?
Vadim
Да на рельном. У него CPU чуть-чуть получше, а RAM тот же, но просто раньше у нас обоих быстро собиралось, а сейчас у меня 2.5 минуты каждый раз, даже если меняшь строчку в проекте
так в новой студии есть разные опции для запуска к примеру если ты изменил только функционал но не трогал визуальную часть я бы предложил перейти на новую + если у тебя линукс то выдели swap соразменро твоему RAM
Ivan
ноуп, а что у тебя проблемки?
нет пока, но теоритически adapterPosition может быть NO_POSITION, согласно исходному коду
Dmytro
нет пока, но теоритически adapterPosition может быть NO_POSITION, согласно исходному коду
может если, ты удаляешь элементы, а в он бинде у тебя кликлисенеры вешаются
Ivan
да, делаю
ок, тогда как делаешь: если pos == NO_POSITION, вообще не вешаешь listener или просто не прокидываешь клик
Ivan
может если, ты удаляешь элементы, а в он бинде у тебя кликлисенеры вешаются
не, так не далаю, но мне кажется в твоём случае, скорее, получишь неверную позицию, а не -1
Dmytro
ок, тогда как делаешь: если pos == NO_POSITION, вообще не вешаешь listener или просто не прокидываешь клик
Если у тебя такое вылезло, то тебе нужно обновлять элементы, чтобы они обновили свои лямбды на клик. Это проверкой ты только лишаешь краша, если был кликнут первый элемент
Vadim
ок, тогда как делаешь: если pos == NO_POSITION, вообще не вешаешь listener или просто не прокидываешь клик
что то типа override fun onClick(v: View?) { if (adapterPosition > RecyclerView.NO_POSITION) listener?.onListItemClick(itemViewId = code) }
Vadim
Mac, и новая и старая студия тормозят :(
хз, на маках вроде как всё ок должно быть смотря какая модель конеш
Ivan
что то типа override fun onClick(v: View?) { if (adapterPosition > RecyclerView.NO_POSITION) listener?.onListItemClick(itemViewId = code) }
ага, то есть просто дропаешь клик, спасибо. сейчас ревьювлю код и вижу, что у меня вообще не вешается клик, если позиция == -1
Vadim
Mac, и новая и старая студия тормозят :(
на медиуме были статейке по оптимизации, так на скорую руку не пайду
Ivan
а где сам лисенер вешаешь? в онБинд?
если в онбинд, то это ошибка, достаточно серьёзная
Ivan
а где сам лисенер вешаешь? в онБинд?
лучше в onViewAttached вешать и в detached снимтаь
Vadim
Ivan
init { itemView.setOnClickListener(this) }
а где снимаешь?))
Vadim
а где снимаешь?))
снимаю?) не понял
Ivan
снимаю?) не понял
temView.setOnClickListener(null)
Ivan
снимаю?) не понял
Ну, чисто теоритически, было бы неплохо как вешать listener, так и снимать его. Соотвественно, подходят симмитричные методы жц
Vadim
temView.setOnClickListener(null)
это избыточное я пробрасываю листенере в адаптер на этом всё
Dmytro
init { itemView.setOnClickListener(this) }
Это инит вьюхоледра же?
Viktor
init { itemView.setOnClickListener(this) }
Почему в bind не сделать?
Ivan
Почему в bind не сделать?
потому что можешь получить неверную позицию. почитай когда bind вызывается, а лучше когда НЕ вызовится
Viktor
Можно Линк?
Ivan
но я не в onCreateVH ставлю
Ivan
Можно Линк?
https://ziginsider.github.io/RecyclerView/
Dmytro
но я не в onCreateVH ставлю
Смотрите, ошибки новичка: вешать клик в онбинде нельзя, поэтому повесим в онКрейтХолдер, но проверку на всякий случай ебанем, гугл так говорит... логика железная)
Ivan
Смотрите, ошибки новичка: вешать клик в онбинде нельзя, поэтому повесим в онКрейтХолдер, но проверку на всякий случай ебанем, гугл так говорит... логика железная)
ты путаешь одно с другим. в onBind нельзя вешать не из-за NO_POSITION, а из-за того, что если ты вызовешь notifyX, в onBind будет ложная позиция, потому что он не вызовется
Александр
1) Создаётся элемент на каждый бинд - вообще пофигу, пусть создаётся. 2) position может измениться - не передавайте в коллбеке position
Александр
Или передавайте adapterPosition, что логично.
marat
как можно удалить дочерний элемент в firebase
Александр
1) (мне) не пофигу 2) если писать абстрактный адаптер, то с позицией проще
Где костыли? Костыли - это пытаться оптимизировать то что в оптимизации не нуждается.
Dug
Держишь в адаптере клик листенер и присваиваешь его из фрагмента/активити/откуда-то ещё. В onBindViewHolder передаешь его в холдер и в холдере в конструкторе ставить клики на то, что тебе надо (можно и не в конструкторе, если логика клика есть какая-то).
Dug
https://ziginsider.github.io/RecyclerView/
Тут в ошибках новичка написана какая-то дичь
Dug
Особенно второй пункт — што
Ivan
мне впадлу тестить, просто если норм компания, я думаю, вы прокатитесь на собеседовании, если вешаете онлик в онбинд
Dug
а если вызвать notifyIntemChanged, то с позицией всё норм будет?
Конечно. Клик ведь обрабатывается в холдере и adapterPosition обновится сам при нотифае
Александр
Ivan
Конечно. Клик ведь обрабатывается в холдере и adapterPosition обновится сам при нотифае
тут всё ок, да, потому что (если) никак не взаимодействуешь с position, которая в onBind передаётся
Ivan
Ну ок, heh.
в onBind ты байндишь, а не прокидываешь одинаковый листнер, не? не разумнее его было поставить в onCreateVH? SRP, не?
Александр
в onBind ты байндишь, а не прокидываешь одинаковый листнер, не? не разумнее его было поставить в onCreateVH? SRP, не?
Мне удобне, когда вся логика связаная с вьюхой RV находится в одном месте. Прокидывать листенер, пусть и одинаковый, суть байндниг. Не понимаю как ты сюда SRP притянул. onCreate создаёт холдер? Создаёт. У него роль такая, этот метод вызывается когда RV нужен новый холдер. Цель метода - холдер вернуть, всё что ты в него напихуёнишь по ходу - твоя инициатива. Делает ли этот метод что - то ещё, кроме как возвращает холдер? В твоём случае да, в моём - нет. Что там у нас по SRP? onBindViewHolder биндит холдер? Биндит. Этот метод вызывается, когда RV необходимо актуализировать в ячейке контент. Является ли навешивание листенера, пусть и такого же, актуализацией? Является. Нарушается ли тут SRP? Нет.
Dug
в onBind ты байндишь, а не прокидываешь одинаковый листнер, не? не разумнее его было поставить в onCreateVH? SRP, не?
При swapAdapter холдеры перебайндятся. Там что-то об этом даже в доке по этому методу написано
Alexsandr
Слушайте, а почему реклама admob перестала работать, до того как прила окажется в плей маркете?
Alexsandr
Ну в гугл плей да
Alexsandr
А admob нет
Alexsandr
Я вообще говорю о том что с любого акка рекламу если ставить admob она не работает, пока прила в гп не окажется
Dug
RESOLVED: Плагины надо было обновить и пару библиотек убрать из debug билдов
А ещё можно просто отключить или удалить кучу ненужных плагоинов