SE
Здравствуйте Я использую библиотеку RxPermissions. У меня архитектура MVVM. Где мне лучше использовать RxPermissions во ViewModel или во View(Activity, Fragment)?
Igor
Кто-нибудь может объяснить, как android.os.SystemClock.elapsedRealtime() работает и обычном unit-тесте на компе?
Vadim
ребят, как можно запровайдить id из фрагмента? сейчас получаю в своей viewModel пустую строку @Provides @Singleton fun provideQuoteId(): String = "" и можно ли вообще так сделать?
Vadim
Так тут же написано что ты провайдишь пустую строку) Какой тебе id нужен?
да, я сейчас сделал так чтобы запустился хотя бы id который у меня находится во фрагменте. Чтобы я мог после загрузить из репозитория элемент по этому id
Папа
или через бандл
Vadim
ну вот решил что через фабрику будет лучше
Папа
так у тебя не фабрика а синглтон вообще
Vadim
так у тебя не фабрика а синглтон вообще
после я использую данную строку в своей фабрике
Папа
🚴‍♂️
Илья
ну вот решил что через фабрику будет лучше
Везде где ты будешь инжектить QuoteId тебе будет приходить то, что ты напишешь в реализации метода provideQuoteId . . . Я не думаю, что для передачи id из фрагмента в viewModel тебе нужен вообще Dagger или какой-то другой di
Vadim
фабрика которая в себе содержит параметры для всех существующих viewModel'ей
Илья
фабрика которая в себе содержит параметры для всех существующих viewModel'ей
Оу, то есть ты хочешь получить не конкретную viewModel, а в зависимости от того id, который передаешь?
Папа
а смысл от такого если репозиторий один будет
Vadim
а смысл от такого если репозиторий один будет
ну репозиторий то я тоже через фабрику передаю
Илья
не не я получу модель с quoteId всё)
Так, в любом случае передача quoteId через @Provides так себе идея, в данном случае . . . Либо я чего-то не понимаю
Vadim
Так, в любом случае передача quoteId через @Provides так себе идея, в данном случае . . . Либо я чего-то не понимаю
вот взгляните на код сейчас загвоздка так раз таки в AppModule https://gist.github.com/mnewlive/add6ded361fd4a1416823ff322472eea
SE
ViewModel
Спасибо
Gleb
ребят, не работает google map в apk файлах, работает только если с компа на телефон через usb переносить, что делать?
Vadim
Одно скажу точно, то что не надо писать provideQuoteId в AppModule
ладно ок) допустим! я передавал из фрагмента guid во viewModel и он приходил и всё чётко классно но проблема была в том, что я не мог стянуть с репозитория по этому guid'у свой элемент почему то.
Илья
ладно ок) допустим! я передавал из фрагмента guid во viewModel и он приходил и всё чётко классно но проблема была в том, что я не мог стянуть с репозитория по этому guid'у свой элемент почему то.
возвращался null? Ошибка какая-то? В таком случае вероятна ошибка в реализации репозитория, я бы посоветовал продебажить от инита до конца запроса элемента
Vadim
визуально я имею в виду.
Илья
null я получаю во фрагменте там где quoteLiveData к примеру author возвращается null
Ну судя по коду это поле объекта в LiveData, следовательно либо LiveData возвращает null, либо не инициализируется ваш quoteId, т.к. там написано quoteId ?: return@run MutableLiveData(null) Почему бы просто не сделать так val quoteLiveData = MutableLiveData<Quote>() fun loadQuoteByQuoteId(quoteId: String) { quoteLiveData.value = quoteRepository.getQuoteByIdLiveData(quoteId) }
Илья
и из фрагмента, допустим в onCreate после setupViewModel() вызвать viewModel.loadQuoteByQuoteId(args.quoteId)
Илья
Віталій
Привет
Віталій
подскажите плиз, как диалогу углы закрулить?
Vadim
У вас LiveData в репозитории???
эм да вот метод fun getQuoteByIdLiveData(quoteId: String): LiveData<Quote>
Николай
подскажите плиз, как диалогу углы закрулить?
dialog.window?.setBackgroundDrawableResource(R.drawable.bg_rounded)
Vadim
У вас LiveData в репозитории???
это разве так критично?
Илья
это разве так критично?
По идее нет, но по хорошему, LiveData только для presentation слоя. Не зря она к lifecycle привязывается
Илья
это разве так критично?
тогда можно сделать так: fun getQuoteByQuoteIdLiveData(quoteId: String): LiveData<Quote> = quoteRepository.getQuoteByIdLiveData(quoteId)
Илья
и подписываться уже тут
Илья
это разве так критично?
у вас там Room, который возвращает LiveData?
Vadim
тогда можно сделать так: fun getQuoteByQuoteIdLiveData(quoteId: String): LiveData<Quote> = quoteRepository.getQuoteByIdLiveData(quoteId)
секундочку в onCreate вызвал метод fun getQuoteByQuoteIdLiveData(quoteId: String?): LiveData<Quote?> = quoteRepository.getQuoteByIdLiveData(quoteId ?: "") но мне надо же использовать его для quoteLiveData
Muhammad
Дайте ссылку на Room заранее спасибо.
Vadim
вызывайте в onCreateView
по идее тогда вообще в onViewCreated?
Илья
по идее тогда вообще в onViewCreated?
Да, точно и по нему уже подписывайтесь. Если можете гарантировать, что repository у вас один, то вы получите один и тот же экземплят LiveData
Илья
подписываться имеется в виду во viewModel верно?
Нет, имею ввиду во фрагменте viewModel.getQuoteByQuoteIdLiveData(quoteId).observe . . . и тд
Vadim
Нет, имею ввиду во фрагменте viewModel.getQuoteByQuoteIdLiveData(quoteId).observe . . . и тд
чётко, но при сохранении мне получается тоже надо будет передавать guid?
Vadim
и при удалении)
Илья
чётко, но при сохранении мне получается тоже надо будет передавать guid?
Видимо да. Я обычно использую LiveData только на ViewModel. С репозитория раньше доставал данные через RX либо сейчас через coroutine. Тут уж как вы посчитаете нужным. В любом случае можно будет ещё что-нибудь придумать
Vadim
Видимо да. Я обычно использую LiveData только на ViewModel. С репозитория раньше доставал данные через RX либо сейчас через coroutine. Тут уж как вы посчитаете нужным. В любом случае можно будет ещё что-нибудь придумать
последний вопросик уточняющий получается что для каждого действия будет создаваться новый метод и доставаться quote это пока плохо) но по сути мне и переменная val quoteLiveData = MutableLiveData<Quote>() уже не нужна будет)
Robert Iskhakov
Скажиье пожалуйста, составил список recyclerview horizontal, как сделать чтобы показывался элемент на экране и следующий показывался бы при Свайпе?
Vadim
Да, но можешь поизвращаться с Transformations, либо написать пару extension через MediatorLiveData
гуд, спасибо, по любому изощраться придётся) потому что как то не DRY вообще))
Илья
гуд, спасибо, по любому изощраться придётся) потому что как то не DRY вообще))
Ну, если уже загоняться по принципам, то LiveData на репозитории не комильфо) Если используете Rx, то советую переделать на Observable или Flowable, а если coroutines, то MutableStateFlow -> Flow
Евгений
никто не знает, как сделать, чтобы айтемы ресайклера не ресайклились?
Anonymous
есть решение?
Gleb
есть решение?
build -> clean -> rebuild пробовал?
Anonymous
build -> clean -> rebuild пробовал?
приводит к этому же сообщению
Anonymous
build -> clean -> rebuild пробовал?
это при синхронизации
Евгений
LinearLayout
там дело в том, что мне еще sticky headers надо сделать. А я это знать только как в recycler сделать
Gleb
это при синхронизации
file -> invalidate cashes / restart можно попробовать
Gleb
пробывал
после чего ошибка возникла?
Mike
есть решение?
что в билдскрипте-то? Ошибка ведь возникает не потому что ты грэдлу не нравишься, а потому что что-то не так.
Gleb
ох, много каки.
что-то добавил и возникла ошибка, что добавил, в истории посмотри?
Anonymous
после чего ошибка возникла?
проект насколько я понимаю с эклипс, там все слишком старое. Обновил все до актуальной версии,и вот.
Евгений
не, если есть, что скроллить, то надо ресайклить)
там мало айтемов. А ресайклинг приведет к рывкам