Прокинуть в адаптер листенер, который вызовет что угодно. Использовать LiveData.
А контекст передать в конструктор адаптера?
Во-первых, он там уже есть. Во-вторых, зачем?
Ну я создаю ViewModelProvider и туда передаю активити(ошибся с контекстом), от туда я его вызвать не могу.
В VM нельзя передавать ссылку на Activity и вообще на всё, что связано с lifecycle. Утечёт.
Странно, requestActivity(или как то так) по гайду передаю и все норм
Можно пример кода, если не трудно?
facepalm Если компилятор не ругается, то это не значит, что так можно. Активити помрет, ссылка на нее останентся в VM. Память утечёт. Нормальный способ из адаптера общаться с внешним миром - https://t.me/android_ru/1022437
лайвдата лишняя имхо, обычный колбек прокинуть и всё готово
Это как один из вариантов просто.
Какой гайд (или гад :) ) учит передавать активити в ВМ?
гугл. с их апишками всякими.
Ааа, извиняйте. В провайдер-то можно и нужно. Главное, чтобы активити в самой ВМ не сохранялось.
То есть в принципе такой принцип вызова функции из адаптера приемлемый? BM это что?
Зачем ссылка на активити в viewModel?
Ну да, вполне. ВМ = VM = ViewModel
Понял, спасибо
Это для провайдера. Ему надо. В VM это не попадет.
Зачем ты провайдер передаешь в адаптер? 🤔
Это обращение к vm. Я так могу методы вызывать из vm
Передается не провайдер, а VM.
Я же тебе дал дельный совет с интерфейсом, а ты заговнокодил)
Ну да, но разве это нормально?
😑
Но так адаптер жестко привязывается к конкретной VM. По идее, он ничего не должен знать об окружающем мире и должен общаться с ним только через колбэки.
Как это сделать?
Я тебе ответил уже на этот вопрос, передай интерфейс
Так же, как это делается в разных setOnClickListener, например.
Ок, не думал, что с вью моделью это будет норм.
При чем тут vm?
Не совсем понимаю о чем вы
Джаву/Котлин изучал?
В адаптер вместо ВМ следует передавать листенер и его дергать из адаптера. Так адаптер будет независим от остальных компонентов приложения.
Предостережение, я с viewmodel недавно
Джаву год, котлин полтора месяца
Кнопкам листенеры назначали же?
В простых случаях можно и лямбду чтоб интерфейсы не плодить
Если понимаешь, что такое интерфейс, то не составит труда создать его в адаптере и передать реализацию в адаптер из фрагмента
+, если котлин
Понятное дело, просто в параметры не передавал листенер, может просто думаю о чем то другом
Это то же самое, только сбоку :)
Какой язык? Котлин?
Да
в жабе вроде тоже можно лямбды передавать
Значит ты лямбду передавал, сделай аналогично в адаптере
Функцию всмысле?
private var callback: ((YourObject)->Unit)? = null
Слушай, почитай книгу, это основы
Если честно, как оскорбление звучит( ведь я достаточно много времени потратил на язык, а то что я просто думаю о другой реализации не значит, что я вообще ничего не знаю.
🙏 спасибо
Я тебе прямо код скинул как сделать.
Но ведь ты не понял, что такое лямбда🤷♂️
Так зачем мне создавать интерфейс для простой задачи? Мне уже объяснили нормальную реализацию
С чего вы взяли?
Проще некуда, какая лучше?
Потому что это понял не только я
😑 ммм ясно
Зачем? Ты создаешь один интерфейс который далее будешь юзать во всех остальных адаптерах, в интерфейс перелаешь view и position и он получается универсальный
Можно же дженериком сделать
Какие вы все крутые разработчики, все всё поняли, молодцы прям. Один другого краше
Тебя никто не оскорблял. Указали на ошибки, сказали как сделать лучше. По итогу мы и виноваты ещё🙂
Ты себе сам это придумал
Отдельный интерфейс для общения с адаптером - это хорошо.
Обсуждают сегодня