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

Кто нибудь знает, как вызвать метод фрагмента из адаптера RecyclerView?

65 ответов

22 просмотра

Прокинуть в адаптер листенер, который вызовет что угодно. Использовать LiveData.

Артем 🇺🇦-Oborozhny Автор вопроса

А контекст передать в конструктор адаптера?

Во-первых, он там уже есть. Во-вторых, зачем?

Артем 🇺🇦-Oborozhny Автор вопроса

Ну я создаю ViewModelProvider и туда передаю активити(ошибся с контекстом), от туда я его вызвать не могу.

В VM нельзя передавать ссылку на Activity и вообще на всё, что связано с lifecycle. Утечёт.

Артем 🇺🇦-Oborozhny Автор вопроса

Странно, requestActivity(или как то так) по гайду передаю и все норм

Артем 🇺🇦-Oborozhny Автор вопроса

Можно пример кода, если не трудно?

facepalm Если компилятор не ругается, то это не значит, что так можно. Активити помрет, ссылка на нее останентся в VM. Память утечёт. Нормальный способ из адаптера общаться с внешним миром - https://t.me/android_ru/1022437

лайвдата лишняя имхо, обычный колбек прокинуть и всё готово

Это как один из вариантов просто.

Какой гайд (или гад :) ) учит передавать активити в ВМ?

гугл. с их апишками всякими.

Артем 🇺🇦-Oborozhny Автор вопроса
Артем 🇺🇦-Oborozhny Автор вопроса

У меня сейчас вот так, что именно тут не правильно?Если requireActivity() Нельзя передавать, тогда что?

Ааа, извиняйте. В провайдер-то можно и нужно. Главное, чтобы активити в самой ВМ не сохранялось.

Артем 🇺🇦-Oborozhny Автор вопроса

То есть в принципе такой принцип вызова функции из адаптера приемлемый? BM это что?

Зачем ссылка на активити в viewModel?

Ну да, вполне. ВМ = VM = ViewModel

Артем 🇺🇦-Oborozhny Автор вопроса

Понял, спасибо

Это для провайдера. Ему надо. В VM это не попадет.

Зачем ты провайдер передаешь в адаптер? 🤔

Артем 🇺🇦-Oborozhny Автор вопроса

Это обращение к vm. Я так могу методы вызывать из vm

Передается не провайдер, а VM.

Я же тебе дал дельный совет с интерфейсом, а ты заговнокодил)

Ну да, но разве это нормально?

Артем 🇺🇦-Oborozhny Автор вопроса

😑

Но так адаптер жестко привязывается к конкретной VM. По идее, он ничего не должен знать об окружающем мире и должен общаться с ним только через колбэки.

Артем 🇺🇦-Oborozhny Автор вопроса

Как это сделать?

Я тебе ответил уже на этот вопрос, передай интерфейс

Так же, как это делается в разных setOnClickListener, например.

Артем 🇺🇦-Oborozhny Автор вопроса

Ок, не думал, что с вью моделью это будет норм.

При чем тут vm?

Артем 🇺🇦-Oborozhny Автор вопроса

Не совсем понимаю о чем вы

Джаву/Котлин изучал?

В адаптер вместо ВМ следует передавать листенер и его дергать из адаптера. Так адаптер будет независим от остальных компонентов приложения.

Артем 🇺🇦-Oborozhny Автор вопроса

Предостережение, я с viewmodel недавно

Артем 🇺🇦-Oborozhny Автор вопроса

Джаву год, котлин полтора месяца

Кнопкам листенеры назначали же?

В простых случаях можно и лямбду чтоб интерфейсы не плодить

Если понимаешь, что такое интерфейс, то не составит труда создать его в адаптере и передать реализацию в адаптер из фрагмента

+, если котлин

Артем 🇺🇦-Oborozhny Автор вопроса

Понятное дело, просто в параметры не передавал листенер, может просто думаю о чем то другом

Это то же самое, только сбоку :)

Какой язык? Котлин?

Артем 🇺🇦-Oborozhny Автор вопроса

Да

в жабе вроде тоже можно лямбды передавать

Значит ты лямбду передавал, сделай аналогично в адаптере

Артем 🇺🇦-Oborozhny Автор вопроса

Функцию всмысле?

private var callback: ((YourObject)->Unit)? = null

Слушай, почитай книгу, это основы

Артем 🇺🇦-Oborozhny Автор вопроса

Если честно, как оскорбление звучит( ведь я достаточно много времени потратил на язык, а то что я просто думаю о другой реализации не значит, что я вообще ничего не знаю.

Артем 🇺🇦-Oborozhny Автор вопроса

🙏 спасибо

Я тебе прямо код скинул как сделать.

Но ведь ты не понял, что такое лямбда🤷‍♂️

Артем 🇺🇦-Oborozhny Автор вопроса

Так зачем мне создавать интерфейс для простой задачи? Мне уже объяснили нормальную реализацию

Артем 🇺🇦-Oborozhny Автор вопроса

С чего вы взяли?

Проще некуда, какая лучше?

Потому что это понял не только я

Артем 🇺🇦-Oborozhny Автор вопроса

😑 ммм ясно

Зачем? Ты создаешь один интерфейс который далее будешь юзать во всех остальных адаптерах, в интерфейс перелаешь view и position и он получается универсальный

Можно же дженериком сделать

Артем 🇺🇦-Oborozhny Автор вопроса

Какие вы все крутые разработчики, все всё поняли, молодцы прям. Один другого краше

Тебя никто не оскорблял. Указали на ошибки, сказали как сделать лучше. По итогу мы и виноваты ещё🙂

Артем 🇺🇦-Oborozhny Автор вопроса

Ты себе сам это придумал

Отдельный интерфейс для общения с адаптером - это хорошо.

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

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

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
32
А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Дорогие любители Прекрасной Джулии! Есть кто-то имеющий практический опыт построения ML для Систем Управления? Нам нужно сделать нейросеть для автоматической подстройки пара...
Roman Timo
4
С той же поддержкой Android в тулчейне, если кому интересно. На Swift Forums шло убогое обсуждение всякой херни годами, но ничего годного так и не появлялось. Пришел vgorloff ...
iMike
1
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Приветствую ребята,у меня база есть,прорешал много задач с литкода,там деревья,списки, бэктрэкинг и все остальное,что мне сейчас делать?есть может куда устроиться поработать,е...
Aקuст Lеתסuд Aקuст Lеתסuд
5
Всех приветствую. Направьте меня в нужное русло. Постепенно переписываю проект с delphi на lazarus. Приложение - обычный windows/linux клиент для бд firebird. Тут все хорошо. ...
Mishutka
6
Anybody want this chat app? If anybody interested dm  me.. Note - Firstly payment then i send you code but i will show work on gmeet.
Rayyan Ahmad
5
Карта сайта