Alexey
Всем привет! Вопрос по MVVM. Нужно при открытии экрана выполнить запрос в сеть. Как лучше сделать, в init{} во вьюмодели запрос этот выполнять или во фрагменте в каком нибудь onViewCreated дергать условный viewModel.goToWeb()? Что считается лучшей практикой? В принципе это ж практически одно и то же…
Vladislav
я использую реализацию гугла для BottomNavigationView, ничего своего
Vladislav
https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt вот эту. Разве что я все attach и detach заменил на show и hide
Artem
есть MutableLiveData, а есть SingleLiveEvent
Artem
MutableLiveData тригерится после переворота
Artem
если нужен единичный ивент - нужно использовать SingleLiveEvent - есть реализация, нужно поискать в гугл
Vladislav
меня устраивает обновление при повороте, мне непонятно где именно проблема с фрагментами
Alexey
Это не одно и то же, ViewModel переживёт поворот экрана и блок init не будет вызван вновь, чего не скажешь о фрагменте
Точно, спасибо. То есть получается, что лучше как раз в init{} делать запрос, нам ведь при повороте ни к чему еще раз делать запрос (в большинстве случаев)
Vladislav
Наталья
меня устраивает обновление при повороте, мне непонятно где именно проблема с фрагментами
у меня та же проблема кстати. есть activity,внутри fragment 1. во фрагменте привязываю ViewModel к activity (поскольку кэш при уничтожении фрагмента нужно хранить) viewModel = ViewModelProviders.of(activity!!).get(FeedViewModel::class.java) 2. в фрагменте подписку оформляю в onCreateView() так: viewModel.isDownloadSuccessful.observe(viewLifecycleOwner, Observer{})..... 3. все отрабатывает норм, но при повороте экрана подписка множится, появляется второй подписчик. при следующем повороте третий и т.п.
Valeriy
кто знает какой самый правильный способ реализовать темную тему в приложении?
Наталья
Andre
тоже не помогло)
может гист есть?
Igor
тоже не помогло)
можно код в onDestroy посмотреть?
Наталья
Igor
ребят кто-то пользуется burp как прокси? чтобы мониторить запросы ?
Наталья
кажется дошло)
Anonymous
@blackmoney261
Igor
кажется дошло)
super.onDestroy как минимум должен быть последним методом
Daulet
ребят помогите, как читать message приходящий в response.errorBody? response.errorBody().toString() показывает ссылку "okhttp3.ResponseBody$1@621373c" Gson.toJson(response.errorBody()) выдает null
Igor
плюс я не знаю что такое viewLifecycleOwner, но там должен быть observer)
Daulet
млн варинатов в инете же?)
именно на error responsebody не могу найти, что что нашел не работает
Daulet
.string() метода нет?
возвращает ссылку на объект
Vladislav
плюс я не знаю что такое viewLifecycleOwner, но там должен быть observer)
это как раз костыль от гугла который позволяет не задумываться об удалении наблюдателей и всё делает сам. Например отписывает их в OnDestroyView
Denis
просто .string()
Andre
+
Наталья
resume срабатывает два раза после переворота
Andre
возвращает ссылку на объект
try { resultsRawResponse = gson.fromJson(responseBody.string(), ResultsRawResponse::class.java) } catch (e: IOException) { return listOf() }
neikist
resume срабатывает два раза после переворота
Покажи где подписываешься код.
Andre
может там фрагмент добавляется каждый раз
Наталья
пока что говнокод) извиняйте, кому глаза режет
Denis
resume срабатывает два раза после переворота
может второй фрагмент создается после переворота? посмотреть в каком конкретно объекте вызывается онрезюм
neikist
Ну я бы сначала как минимум перенес в onViewCreated потому что инициализация овнера заканчивается позже onCreateView
Anonymous
простите, не могли бы дать совет...Можно ли програмно подключится к конкретной wifi сети , зная ее ssid и пароль, не используя класса Reciev и всё что с ним связано? а просто используя такие ресурсы как : conf = new WifiConfiguration(); conf.SSID = "\"" + networkSSID + "\""; conf.preSharedKey = "\"" + networkPass + "\""; wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE); int netId = wifiManager.addNetwork(conf); wifiManager.enableNetwork(netId, true);
Daulet
@dblnv @Andre1024 спасибо ребят, заработало метод .string(), буду знать о таком методе 👍👍👍
Andre
тоже самое получается
как фрагмент создается, с активити?
Наталья
как фрагмент создается, с активити?
в методе onCreate у активити - транзакция add метод
neikist
resume срабатывает два раза после переворота
А вообще стоп. Как это связано вообще с лайвдатой?
Vladislav
Ребят, подскажите, я немного изменил БД, полностью удалил приложение с эмулятора что бы не делать миграцию, все работает, а на своем самсунге приложение полностью удалил, но после установке не работает, ROOM матерится на миграцию БД на новую версию. Получается после удаления БД остается?
Arsen
в методе onCreate у активити - транзакция add метод
добавляй только если сейведбандл == нул
Наталья
спасибо!!!!😊
Vladislav
ну а если этим занимается architecture navigation component?
Наталья
Arsen
не так isProcessRestored = savedInstanceState != null if (isProcessRestored) { //todo something }
Arsen
в активити
Arsen
тебе в else нужно транзакции делать или инвертировать флаг !
Serhiy
Привет народ. Подскажите, какая минимальная версия андроид поддерживает android.widget.Toolbar и полностью ли прекращена поддержка android.support.v7.widget.Toolbar?
Arsen
тулбар в androidx есть
Andre
А есть идеи как ГУГЛ транслейт делает перевод когда копируешь слово и появляется поверх всех окон иконка для транслейтера?)
Andre
ты про плагин для хрома?
нет, стандартное приложение для дроида от гугла
Andre
там в настройках можно выбрать, что когда копируешь слово - появляется иконка транслейтера поверх всех окон
Max
для чего нужен View binding? он быстрее при компиляции, есть ещё польза?
Max
Меньше когда, удобнее использовать.
меньше какого кода? у меня нет мввм мвп, и кода очень мало и так .. куда уж меньше))
Viacheslav
Если ты пишешь на Kotlin и без архитектур, то смысла в использовании я не вижу
Denis
для чего нужен View binding? он быстрее при компиляции, есть ещё польза?
он быстрее при компиляции? Не понял, как он ее ускоряет, если там кодген Это просто нелепый конкурент синтетикам из котлин
Vladislav