Adel
Получается сейчас мне нужно создать Repository, в котором будет описано что делать в каком случае? Например, я выполняю запрос ретрофит, получаю OnSuccess, вызываю метод у LiveData, далее ViewModel вызывает уже метод обновления UI?
Adel
пока всё клёво, чо
А в случае OnFailure я подгружаю данные из БД опять же через LiveData
Adel
И для каждого Activity будет свой Repository, своя ViewModel?
Aleksey
@snoozerio это правильный подход?
нет, но для начала пойдёт
Adel
нет, но для начала пойдёт
А какой правильный?
Aleksey
А какой правильный?
да хер знает) тот, который решает задачу да не запинают меня некоторые, погугли GitFox - там всё плюс-минус по классике, необходимой для работы в компании/команде
Aleksey
Как антипример — отлично
ну камон, предсказуемо)
Aleksey
Как антипример — отлично
если поймёт как делают все и сможет делать так же - уже сможет работать и тд поймет, что так плохо - будет искать способы, как надо
Mike
если поймёт как делают все и сможет делать так же - уже сможет работать и тд поймет, что так плохо - будет искать способы, как надо
Если есть цель делать так же хуёво, как «все» — ок, только пусть это будет осознанно.
Aleksey
Если есть цель делать так же хуёво, как «все» — ок, только пусть это будет осознанно.
человек осознанно курит гайды от гугл, почему нет? я пришёл к тому, что «как все» - больно, после того, как полгода посидел на легаси из полного набора
Корбен
Ребят гугл не помог(ну точнее неправильно помог) Есть база данных с строками Я считываю с помощью NFC номер карты и нужно его сравнить с теми что есть в базе Если номер есть-делать одно действие Если номера нет-другое Подскажите куда копать примерно?
Корбен
Что именно не получается?
Не получается сравнить Банально не врубаюсь как Есть пачка номеров в базе, есть карта NFC
Александр
Всем привет. ребят такой вопрос..делаю адаптер для списка и получается такая ситуация, один элемент списка имеет шапку и какой то контент. я для адаптера использую gridLayoutManager с 3 колонками. шапку мне надо рястягивать на всю ширину экрана, а контент делить на 3 колонки..... как это реализовать ? получается мне надо использовать 2 viweHolder для 1 элемента списка
Александр
spanSizeLookup
Спасибо, щас погуглю
Александр
spanSizeLookup
блин так я ее юзаю
Adel
Хорошо, благодарю
В продолжение к своей проблеме : Написал Repository и ViewModel, внутри ViewModel сделал loadCustomers, но немного не понимаю, как внутри связать LiveData внутри ViewModel с Repository
Adel
https://pastebin.com/umnfXEJg Тут соответственно неправильный вариант внутри loadCustomers
Adel
Брал отсюда пример : https://developer.android.com/topic/libraries/architecture/viewmodel
Александр
spanSizeLookup
у меня список, где в каждом элементе списка есть данные для заголовка (фото + надпись). и + есть список карточек которые надо отображать под заголовком. я до этого реализовывал это путем реализации адаптера во viewholder для каждого элемента списка. получается был адаптер внутри адаптера. производительность была плохая. пытаюсь теперь реализовать с помощью 1 адаптера
Александр
Ты можешь заголовки сделать декоратором?
что такое декоратор? девидер?
Valentyn
И для каждого Activity будет свой Repository, своя ViewModel?
У нескольких активностей и фрагментов могут быть одни и те же Repository и ViewModel.
Valentyn
Понял, спасибо
У тебя может быть к примеру один бекенд у приложения, ты реализовал 1. репозиторий и датасорсы к нему (data-слой. Если датасорс один, то я его временами объединяю с репозиторием), 2. use case (domain-слой. Domain слой не всегда есть у приложения. Просто так его не надо делать, надо знать чётко, для чего domain-слой), 3. а вот в UI-слое у тебя могут быть разные активности, которые будут дёргать разные методы ViewModel, потому что они отображают разную информацию и/или выполняют разные действия с бекендом в зависимости от того, что должен делать тот или иной экран приложения. Вот пример того, как несколько активностей могут одну и ту же viewModel использовать.
Adel
Понятно, спасибо большое :)
Adel
У тебя может быть к примеру один бекенд у приложения, ты реализовал 1. репозиторий и датасорсы к нему (data-слой. Если датасорс один, то я его временами объединяю с репозиторием), 2. use case (domain-слой. Domain слой не всегда есть у приложения. Просто так его не надо делать, надо знать чётко, для чего domain-слой), 3. а вот в UI-слое у тебя могут быть разные активности, которые будут дёргать разные методы ViewModel, потому что они отображают разную информацию и/или выполняют разные действия с бекендом в зависимости от того, что должен делать тот или иной экран приложения. Вот пример того, как несколько активностей могут одну и ту же viewModel использовать.
А вот такая ситуация, допустим имеется две активности, одна из них показывает таблицу, а вторая добавляет в нее данные, у них должен быть разный ViewModel? Но при внесении данных во второй активности, это должно отразиться на первой, как это реализуется?
Valentyn
https://t.me/Android_Architecture
Александр
Ты можешь заголовки сделать декоратором?
я понял что ты имеешь в виду. попробую. спасибо
Александр
А плохая произвольность из-за чего была?
лагал список жестко при быстром скроле, я добавлял setRecycledViewPool и лаги проходили. но заметил такую вещь, что из-за того что setRecycledViewPool переиспользует вьюзи у меня не всегда нужные данные отображались, а какаие то другие
Александр
да и вообще мне скзаали что адаптер в адаптере это плохая затея
Dug
А ты что-то тяжелое там делал? Разбирался вообще в причинах лагов?
Сергей
Ну, скажем, общий репозиторий - где хранится доступная для них дата.
Anonymous
Всем привет, как перекинуть человека в другой фрагмент
Anonymous
?
Anonymous
One
FragmentManager в помощь
Artem
Ребята, не могу стартануть сервис внутри сервиса. Можно ли вообще это сделать?
Artem
Не прибегая к вызову внутри MainActivity
Ivansuper
Не прибегая к вызову внутри MainActivity
Для старта сервиса тебе нужен объект контекста. На этом все
Ivansuper
Контекстом является активность, сервис, или апликейшн. Последнего по умолчанию нет и тебе надо прописывать класс самому. Контекст апликейшена один и живет пока процесс не умрет. Можно его использовать для старта
Artem
Для старта сервиса тебе нужен объект контекста. На этом все
Но мне необходимо запустить сервис, не вызывая его в аппликейшн или меин активити. Можно ли так сделать?
Artem
В смысле? А когда тебе его надо запустить? Что является толчком?
Открытие приложения. Просто суть в том, что сервис - это таймер, и при истичении времени, открывается другая активити и сервис больше не дожен использоваться
Ivansuper
Открытие приложения. Просто суть в том, что сервис - это таймер, и при истичении времени, открывается другая активити и сервис больше не дожен использоваться
Почему не рассматриваешь возможность стартануть его из первой активности которая открывается при старте приложения?
Ivansuper
Как это тебе мешает?
Artem
Почему не рассматриваешь возможность стартануть его из первой активности которая открывается при старте приложения?
Сервис ,грубо говоря, одноразовый. Приложение запустилось - запустился сервис - время истекло - запустилось другое активити и сервис не должен больше использоватся в приложении
Ivansuper
В чем проблема
Ivansuper
Используй флаг. Не стартуй если уже стартовал. Стартуй из Application$onCreate
onCreate у последнего выполняется один раз за всю жизнь процесса
Victor
Если в андроидстудии весь лейаут выглядить адекватно, а в эмуляторе memu изображения не появляются. В чём косяк может быть?
Anonymous
Здравствуйте, что делать, если выходит такая ошибка: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at com.amixen.studio.socialnetwork.Show_all_users$1.onDataChange(Show_all_users.java:60) вот срочка на, что ругается: if (!users.getId().equals(firebaseUser.getUid())){
Valentin
Ну может продебажить и посмотреть какой объект null?
да не, бред какой-то. можно просто здесь спросить)
Влад
2GB и чувствствую себя отлично
Влад
так студия лагает или эмуляторы?
awawa
На работу влияет не только ОЗУ же. Ещё скорость камня и диска. Плюс скорость самой ОЗУ тоже
awawa
У меня на работе 10Гб озу, нормальный камень и ссд. Всё летает. Дома 12 Гб озу и ссд, но камень слабоват - в разы медленнее работает
Влад
а у самой IDE heap size какой стоит?
awawa
Шарящие, подскажите чего делать в такой ситуации: есть в апке NavigationDrawer, через неё переключаюсь между фрагментами. Так вот у меня в одном фрагменте отображается LinearLayout с вьюшками, их я храню во ViewModel в MutableLiveData и в onCreateView делаю observe, в котором добавляю вьюшки в Layout. Проблема в том, что если переключаться на этот фрагмент с других, то всё работает. А если с этого на этот же снова - нет. Вылетает ошибка java.lang.IllegalStateException: The specified child already has a parent.. Почему вылетает догадываюсь - старый фрагмент кладётся в бэкстек, и создается новый, а вьюшки лежат в старом. Но не пойму каким образом это пофиксить, ибо removeView из старого сделать не получается. Кто-то шарит как это лучше всего решить?
Hovhannes
Сохраняй последний айди фрагмента который виден и если юзер хочет опять перейти на него же - игнорируй
awawa
Сохраняй последний айди фрагмента который виден и если юзер хочет опять перейти на него же - игнорируй
А где это делать? Я то сам навигацией не управляю. Если я правильно понимаю, то за меня всё делает NavController вот тут
awawa
Интересно, что у старого фрагмента не вызывается onPause
awawa
Какие методы жц фрагмента вызываются?
Да вот тоже подумал об этом, сейчас посмотрю