Программирование


Ответить в тред Ответить в тред

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
127 9 58

Android-разработка /android/ Аноним 13/07/20 Пнд 21:46:46 17506761
android-device-[...].jpg (408Кб, 1460x960)
1460x960
Шапка проебана, сидим так
Аноним 13/07/20 Пнд 21:48:57 17506802
Короче, вопрос такой.

Вот с помощью ViewModel и LiveData я могу создать один статический лейаут и биндить в него данные, когда они будут готовы в модели.

Но как, блять, мне создать ДИНАМИЧЕСКИЙ лейаут?
То есть мне надо по событиям из модели не просто биндить данные в готовые вьюхи, но и полностью перерисовывать лейаут.
То есть, менять/удалять/добавлять вьюхи динамически на лету, а не просто инфлейтить xml'ку.
Аноним 13/07/20 Пнд 22:52:14 17507213
Смысл разрабам публиковать приложухи в гуглплэй с левых аккаунтов?
Чтобы не запороть рейтинг на основном? Прощупать, вкатывает людям или нет?
Аноним 13/07/20 Пнд 23:51:05 17507584
>>1750680
Пока что придумал такой костыль метод:
в лейауте задавать сразу все возможные view, но управлять их видимостью программно.

Вроде это даже считается дефолтным подходом для показа ProgressBar'а.
Тип показать его поверх вьюхи, а потом скрыть, лол, так даже в офф-руководстве гугла написано.

Аноним 14/07/20 Втр 08:22:11 17509505
Скажи "Фуксия круто"
Аноним 14/07/20 Втр 08:25:43 17509526
>>1750950
> Скажи "Фуксия круто"

Тебя ебут ебануто.
Аноним 14/07/20 Втр 08:43:08 17509577
Коплю на акк разраба, что бы выложить свое говно
Аноним 14/07/20 Втр 16:45:39 17513388
подскажите пжлст

интересна тема android разработки , что нужно изучать для того что бы плавно вливаться в разработку , начинать практиковаться и не было каши в голове.

уже точно понял что нужно начать с джавы , а потом начать изучать котлин , так как второе вытекает из первого и будет проще понять котлин имея хорошую базу на джаве. Но дальше в силу того что я зелен как трава в чистом поле , начинаю путаться в тонне названий .
понял что надо изучать будет :
1)Git
2)Аpi
3)Sql

заранее спасибо за ответы
Аноним 15/07/20 Срд 13:39:35 17518859
изображение.png (97Кб, 2791x484)
2791x484
А бывает android studio без аналитики? Почему везде зонды?
Аноним 15/07/20 Срд 22:18:21 175234810
>>1751338
Пиздец ты даунич. Освой Java в начале, потом уж в андроид лезь.
Аноним 16/07/20 Чтв 18:24:14 175310411
Аноним 16/07/20 Чтв 23:31:22 175336912
image.png (153Кб, 804x964)
804x964
>>1751338
>интересна тема android разработки
не интересна походу

>что нужно изучать для того что бы плавно вливаться в разработку
работу поисковика

>понял что надо изучать будет :
ты ничего не понял
Java, MongoDB, Android SDK

>начинать практиковаться
this прежде всего в любом ЯП

>и не было каши в голове.
ограничь потоки медиа и прочих раздражителей в своей жизни
Аноним 17/07/20 Птн 00:52:23 175340613
>>1750676 (OP)
>Шапка проебана
не думал что вы проебали мою шапку. впрочем все равно, я не пишу больше на андроиде. и вам не советую.
Аноним 17/07/20 Птн 10:05:38 175359014
...
Аноним 17/07/20 Птн 16:10:29 175395415
Есть один json с сервера, который я маплю в объекты и сохраняю в бд с помощью room. Иногда эти объекты надо обновлять, делая повторный запрос к серверу. Сильно ли скажется на производительности если я буду просто удалять старые объекты из бд и записывать новые? Или лучше взять старые объекты из бд, сравнить с новыми и обновить если есть изменения?
Аноним 17/07/20 Птн 17:05:49 175398616
Аноним 19/07/20 Вск 16:38:32 175541617
>>1751338
вкатывайся брат, главное что то делай.
сам учу, сижу кайфую
Аноним 19/07/20 Вск 22:42:09 175558718
Тут такая хуйня, RecyclerView рандомно сохраняет части комплексной вьюхи, если они не были перебиндены в onBindViewHolder
Например, если у треда нет изображения, оно там может с нихуя появится из прошлого треда
RecyclerView же переиспользует как-то элементы списка? Выглядит, как будто если я не перебиндил каждый элемент, то он может остаться тем же, что и был до этого
То есть, если в прошлом треде я задал holder.imageViewPostImage, а в этом не задал, то там может остаться изображения с прошлого
Это норма?
Аноним 19/07/20 Вск 23:58:32 175561119
Сеньор-архитектор снова в ожившем треде, чтобы ответить на ваши вопросы
Оп, как можно было проебать шапку?
>>1750680
Что у тебя за задача? Как ты пришел к идее "перерисовывания"? Не советую заигрываться с лейаутом из кода, только время потратишь, но далеко не факт, что добьешься стабильной работы и решишь задачу. Из-за этого, кстати, Гугл пилит Jetpack Compose.
Какие вьюхи тебе нужны, какой функционал? Что нужно отображать, что изменяется, а что нет? Подробнее напиши.
>>1751338
Основы программирования, логические операции -> Джава(базовый синтаксис и особенности языка) -> ООП -> особенности различных версий Джава -> алгоритмы и структуры данных -> многопоточность -> дженерики -> функции высшего порядка -> Котлин -> Android SDK(UI, версии и различия, особенности оси на уровне работы виртуальной машины) -> работа с БД, CRUD(можно и на этапе знакомства с алгоритмами) -> git -> networking/REST API/JSON/сериализация -> актуальные фреймворки(зачем и почему, спойлер: экономия времени ) -> архитектура, зависимости, инверсия контроля -> ?..
Вот примерный флоу, которому я бы следовал, если бы учился сейчас. начал бы сразу с алгоритмов, если честно
В эту же последовательность нужно вставить clean code, SOLID, DRY/DIE, KISS, YAGNI и прочие модные аббревиатуры, которые весьма актуальны. Что-то упустил, но, думаю, этого достаточно.
Читай документацию книги, минимум ютуба и туториалов.
>>1753369
>Java, MongoDB, Android SDK
В голос
>>1753954
>Сильно ли скажется на производительности
Зависит от количества объектов, лучше апдейтить. Ориентируйся на оправданность использования того или иного подхода. масштабируй
>>1755587
о каком треде идёт речь?
RV всего лишь отображает данные, которые байндятся к позиции, так что всё зависит от того, чем и как ты его кормишь.
Аноним 20/07/20 Пнд 10:36:45 175579520
>>1755611
>Что у тебя за задача? Как ты пришел к идее "перерисовывания"?
У меня BLOC-паттерн. Ну или упрощенно - стейт-система по типу Redux в жопаскрипте.
Суть в том, что интерфейс полностью соответствует текущему state.

if (state = LoadingState) рисуем прогресбар
if (state = ErrorState) рисуем ошибку
if (state = SuccessState) рисуем списочек

Сейчас у меня в этом месте несколько костыльно, ибо onCreateView() вызвается лишь 1 раз, а логичнее, чтобы интерфейс перерисовывался для каждого стейта.

Сейчас же у меня тупо progressbar скрыт и появляется поверх пустого списочка, а ошибка показывается снекбаром.
Короче, мне надо полностью перерисовывать интерфейс полсе того, как он был нарисован в onCreateView().
Не обязательно вручную, но надо переинфлейтить xml'ку
Аноним 20/07/20 Пнд 11:45:31 175582921
>>1755795
>У меня BLOC-паттерн
>стейт-система по типу Redux
Если провести аналогию с BLoC, твой стейт должен реагировать поток данных, которые ты получаешь, будь то ViewModel или RX, где ты можешь вызывать коллбэки в зависимости от состояния Observable/Flowable. Соответственно, если ты используешь single activity, в активити у тебя будут оверрайд методы onSuccess, onLoading, onFailure от интерфейса, который она экстендит . В этих методах ты управляешь видимостью прогрессбара(он есть только в главной активити, т.к. она является контейнером с общей логикой отображение) и загружаешь нужный экран фрагмент для пользователя, в зависимости от состояния.
Если источник данных не поймал success, пользователь просто не попадёт во фрагмент со списком.(с RX это делается красиво)
Это общий принцип и важно понимать, что реализация зависит от используемой тобой архитектуры. но он хорошо масштабируется
>onCreateView() вызвается лишь 1 раз, а логичнее, чтобы интерфейс перерисовывался для каждого стейта
Не логичнее, это дорого, да и незачем лишний раз трогать жизненный цикл вьюхи. У тебя есть контейнер, который ожидает данные - он итак пустой, если их нет. Ты должен показать его пользователю, если они есть.
Почитай об MVI.
Аноним 20/07/20 Пнд 12:22:42 175585122
>>1755829
>Если провести аналогию с BLoC, твой стейт должен реагировать поток данных, которые ты получаешь, будь то ViewModel или RX, где ты можешь вызывать коллбэки в зависимости от состояния Observable/Flowable
Вот именно это и происходит. Есть BlocViewModel : ViewModel, где есть метод mapEventToState(event: EventInterface): Flow<StateInterface>
Далее немного магии и преобразований и фрагмент подписывается на LiveData с этими стейтами.
Ну, как ты понимаешь, очень важно, что может быть только 1 актуальный стейт, не может быть сразу двух активных стейтов.

Вот в идеале этот обсервер стейтов должен быть чистой функцией, выдающей интерфейс в ответ на стейт, но пока это нихуя не выходит и приходится скрывать/показывать уже существующие в лейауте вьюхи, например, тот же прогресс-бар.

>загружаешь нужный фрагмент для пользователя, в зависимости от состояния
Вот юзать отдельный фрагмент на каждое состояние выглядит дорого и геморно... Или нет? Надо создать класс для фрагмента, xml для него... Хотя...
С другой стороны, отлично ложиться на чистоту обсервера стейтов - он будет просто высирать по фрагменту на стейт.

Аноним 20/07/20 Пнд 12:54:39 175586523
>>1755851
>очень важно, что может быть только 1 актуальный стейт, не может быть сразу двух активных стейтов.
Ты можешь просто создать observer внутри фрагмента, проинициализировать в нём же интерфейс OnLoadState в onCreateView/onAttach и вызывать state.onSuccess(коллбэк), когда livedata.value не null. (адаптируй под флоу пользователя)
>Вот в идеале этот обсервер стейтов должен быть чистой функцией
Вот смотри, в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар.
Ты обозреваешь данные, а не стейты. Стейты отвечают за доступ, а твоя задача - сообщить о том, что вот тут будет такой-то стейт.
>Вот юзать отдельный фрагмент на каждое состояние выглядит дорого и геморно
Ты, похоже, не понял меня.
Пример:
Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2. Ты мыслишь не в той плоскости, потому что всё то, что не связано с данными, которые могут отсутствовать, или условиями, которые могут не быть соблюдены(как успешная аутентификация), детерминировано.
Аноним 20/07/20 Пнд 16:55:27 175607624
>>1755829
>>1755865
>Почитай об MVI.
Почитал, все те же вариации на тему реактивщины под другим соусом, что и в Redux и в BLOC. Никакой новой инфы не узнал.
Суть везде та же.

>в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар.
То есть, глобальный обработчик стейтов, один на все приложение?

Вообще, я, да и не только я, разделяю понятие стейта и побочного эффекта. Стейт - это то, что остается после изменения конфигурации. Перевернул экран - списочек все тот же.
Побочный эффект же характерен тем, что возникает только 1 раз, при этом стейт не меняется. К этому относятся показ снекбара, диалога, осуществление навигации на другой фрагмент и т.п.


>Ты обозреваешь данные, а не стейты
Вот тут не понял. Стейт же и есть данные для UI.

Но смотри, с какими проблемами я сталкиваюсь при работе со всей этой реактивщиной и стремлением к максимальной чистоте функций.
1) Если сделать полную перерисовку интерфейса в ответ на стейт (обсервер стейтов идеальная чистая функция), то при изменении конфигурации будет сброшена, например, позиция списка, потому что он фактически перерисован заново. Хотя ее тоже можно сделать частью стейта, но по мне так это больше деталь реализации UI и об этом вообще я думать не должен.
2) Если обсервер стейтов не чистая функция, то возникают непредсказуемые побочные эффекты, теряется контроль над фактическим состоянием UI, он перестает соответствовать объекту стейта.

>Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2
Ну вот, ты вновь не отделяешь стейт от побочного эффекта.
По твоей схеме onLoading тоже должен был являться стейтом и породить свой фрагмент.
Но вообще, именно с осоознанно созданными побочными эффектами у меня проблем нет, потому что они обрабатываются отдельно от стейтов и стейт не меняют

Ну и еще, если создать глобальный обработчик событий и стейтов, то каждое событие и каждый стейт должны быть уникальными.
Сейчас у меня есть универсальные события типа ListItemClicked, которые могут иметь разный смысл в контекте разных BlocViewModel.
Аноним 20/07/20 Пнд 17:13:59 175608425
>>1755865
>Ты можешь просто создать observer внутри фрагмента, проинициализировать в нём же интерфейс OnLoadState в onCreateView/onAttach и вызывать state.onSuccess(коллбэк), когда livedata.value не null. (адаптируй под флоу пользователя)
Вот про это по-подробнее, плиз.

Еще есть охуенная проблема, как все эти стейты и реактивность положить на жизненный цикл ведра и его особенности.
Например, те же фрагменты
Аноним 20/07/20 Пнд 18:42:54 175615826
>>1756076
>Вообще, я, да и не только я, разделяю понятие стейта и побочного эффекта.
Дело в том, что я придерживаюсь следующего принципа - есть UI стейты(которые не могут изменять объекты и, собственно, конечны в своём выполнении, ответственны только за свою отработку в качестве "ключа", так что сайд эффекты исключаются), которые должны выступать ограничением для пользователя и выстраивать его "флоу"(Простые коллбэки, которые вызываются тогда, когда данные получены(observer livedata). Важные, например, сессионные данные (вроде id и подобного) передаются через бандл), есть состояние самих данных в репозитории, откуда они идут во viewmodel, которые либо есть, либо отсутствуют. Получать данные или состояние данных нужно во вьюмодели/презентере, UI должен только обозревать их и реагировать(обновляться, отображать и т.д.).
>>1756084
>Вот про это по-подробнее, плиз.
Например, в onAttach создаешь callback = context as StateListener, хендлишь ClassCastException через try/catch, при нажатии на кнопку вызываешь callback.onLoadList, который либо загружает фрагмент со списком(получая данные из viewmodel), либо делает что-то, что предусмотрено в этом случае.
>как все эти стейты и реактивность положить на жизненный цикл ведра
Делать можно как угодно, хоть создавать compositeDisposables прямо во фрагменте или активити и развлекаться, диспозить в onDetach. не стоит так делать Есть ли в этом необходимость? Логика должна быть разделена, модули должны быть изолированы.
Не до конца понимаю твоих намерений. Чтобы отобразить фрагмент со списком, можно просто чекать value livedata и выбрасывать onError, если данные где-то подкосило, потому что все ивенты в итоге приходят во viewmodel, но никак не в UI слой.
Аноним 21/07/20 Втр 00:59:03 175647327
>>1756158
Смотри, у меня сейчас точкой входа является фрагмент.

Фрагмент сразу же рисует RecyclerView с пустыми данными и отправляет событие Initialized в модель.
Модель в ответ на это событие начинает грузить данные и эмитит стейт Loading, затем стейт Success со ссылкой на данные (которые все еще в самой моделе).
Фрагмент ловит стейт Success и тупо заменяет тот пустой лист-плейсхолдер на эти данные (по ссылке).

Еще у меня стоят коллбеки на свайпы элементов списка, которые тупо отправляют соответствующие события в модель.
Модель в ответ на них удаляет или изменяет ДАННЫЕ (которые хранятся в самой моделе) и отправляет действие (я так называю побочный эффект) о том, что элемент, допустим удален.
Фрагмент ловит это действие и нотифит адаптер о том, что данные изменились. И интерфейс листа красиво показывает анимацию удаления элемента.
Фишка в том, что стейт-то не изменился. Просто побочный эффект привел к изменению самих данных.
Стейт, способ отображения UI каким был, таким и остался, удали хоть все элементы.

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

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

Вот в идеале надо бы как-то это в коде обозначить, что стейт = фрагмент, всегда.
Тогда возникает вопрос с точкой входа.
Сейчас это сам этот фрагмент.

Но в идеале точка входа должна быть какой-то другой.
Чтобы некая хуйня обсервила стейты и в ответ на каждый запускала фрагмент.
То есть, чтобы если модель выдала ошибку - сразу и нарисовался фрагмент ошибки, а если норм данные - то сразу запустился фрагмент с норм данными.
НО. Тут еще дело в том, что как именно эти фрагменты запускать.
Потому что иногда мне надо в пределах того же ЭКРАНА полностью перерисовать интерфейс, то есть таки сменить стейт, а иногда мне надо запустить навигацию на новый фрагмент, чтобы он остался в стеке переходов.

То есть, поменять стейт без перехода в рамках того же "экрана" или же перейти на новый фрагмент-экран...
Аноним 21/07/20 Втр 02:52:27 175649228
>>1756473
Распишу подход, мб пригодится и что-то применишь.
Если пилить по чистой архитектуре:
Модель должна содержать только описание объектов, репозитория(абстракцию) и юзкейсы для получения данных в презентере/viewmodel. Данными ты манипулируешь(получаешь тем или иным способом, кэшируешь и т.д.) в другом слое(с реализацией абстрактного репозитория), где могут быть мапперы для модели и всё то, что делает модуль максимально изолированным, но нет андроида - он во view слое, где и viewmodel(которая реализует юзкейсы). Всё это позволяет сильно упростить жизнь.
Интересно, как у тебя выглядит фрагмент ошибки? И зачем ей свой фрагмент?
Точка входа - активити, которая ловит коллбэки(loadNameScreen, где тебе прогрессбар/диалог/снэкбар и все остальное) и навигейтит во фрагменты через navhost(тут же легко реализуется бэкстэк и бандл, куда можно что-то передать, к примеру, флаг, который будет влиять на отображение компонентов внутри фрагмента). Сделать god object'ом активити в этом случае очень сложно, если ограничиться навигацией. Работать с таким кодом приятно.
Аноним 21/07/20 Втр 03:35:38 175649529
Аноним 21/07/20 Втр 21:58:23 175715630
1595357902414.jpg (129Кб, 1080x2160)
1080x2160
>>1756492
>Интересно, как у тебя выглядит фрагмент ошибки? И зачем ей свой фрагмент?
Аноним 21/07/20 Втр 22:13:23 175717231
Как победить андроид студию
Аноним 22/07/20 Срд 16:01:49 175770132
Стоит ли вкатываться в андроид разработку или лучше идти в плюсы или питон?
Аноним 22/07/20 Срд 16:50:30 175777933
>>1757701
Нет, раз ты задаешь этот вопрос.
Аноним 22/07/20 Срд 19:50:05 175792434
Кто что думает по поводу Flutter. Будет ли он востребован в ближайшее время?
Аноним 22/07/20 Срд 21:26:26 175799335
Аноним 23/07/20 Чтв 19:12:21 175869436
>>1755611
Ебать какое же дерьмо в голове

>сениор
разве что в мобильном геймдеве друк
Аноним 23/07/20 Чтв 22:17:56 175881037
>>1758694
>Ебать какое же дерьмо в голове
Поясняй, вкотя, что не так?
Аноним 23/07/20 Чтв 23:09:52 175883438
изображение.png (113Кб, 640x1280)
640x1280
>>1750676 (OP)
подскажиет, обязательно делать приложение по правилам material дизайна чтобы оно выглядело как нативное андроид приложение, я на qml делаю макет сейчас, и вот делаю дизаин как мне нравится, но набрёл на правила material дизайни и хуй знает, подстраиваться ли, или делать так как в голове вырисовалось.
Аноним 23/07/20 Чтв 23:10:57 175883539
>>1758834
сука вопросительные знаки проебал :<
Аноним 24/07/20 Птн 00:22:46 175888140
>>1758834
Лучше делай
На пике кривая верстка
Аноним 24/07/20 Птн 08:43:10 175901041
>>1750676 (OP)
Сап, котаны, есть 2 интеесных вопроса:

1) Если я хочу отображать состояние из Foreground Service в UI через LiveData, то должен ли сервис непосредственно вызывать метод postValue и передавать туда новый экземпляр объекта, который описывает состояние?

2) В чем практический смысл Dependency injection, особенно Dagger 2?

Аноним 24/07/20 Птн 10:35:26 175905842
>>1750676 (OP)
Привет. Пытаюсь создать в новый build type в gradle. Прописал его в buildTypes, создал директорию в src с AndroidManifest итд. Но он не появился в assemble tasks. Что я делаю не так?
Аноним 24/07/20 Птн 10:46:14 175906743
>>1758881
да, я это понимаю что слишком тонкий хедер и в футер лучше бы ещё что то добавить чтобы 3 кнопки было, но вопрос у меня стоит в том: нужно ли всем правилам следовать или можно юзать свои иконки вместо material иконок и свои идеи в некоторых местах?
Аноним 24/07/20 Птн 12:34:01 175914044
>>1759010
1) Ты должен вызывать postValue с состоянием во viewmodel, обозревая livedata в UI.
2) Реализует DI-паттерн, сокращает количество кода, генерируя dagger и hilt, другие же реализуют паттерн service locator и дергают зависимости без подробностей реализации, когда зависимый объект в них нуждается логику создания объектов(фабрики для viewmodel, например) и позволяя создавать новые объекты с помощью аннотаций. создает граф зависимостей Упрощает работу с зависимостями в самом коде и тестах.
>>1759067
Нужно или нет - решать тебе, суть material в самой концепции взаимодействия компонентов интерфейса, образующих "материальный дизайн". Он просто предоставляет тебе инструменты и гайдлайны. Я стараюсь придерживаться, если это возможно.
Аноним 24/07/20 Птн 12:57:35 175915045
Аноним 24/07/20 Птн 14:02:00 175918846
>>1758834
Если твой уровень понимания UX на пике - то делай строго по material и не еби мозг пользователям. UX designer - это как бы професия, за это деньги платят и там есть что изучать что бы хуй ложить на метериал.
Аноним 24/07/20 Птн 14:31:05 175920647
>>1759188
ну у меня уровень понимания UX скорее на хуях чем на пике, ну думаю сделаю макет руководствуясь изредка material, просто я хз они иконки предоставляют, а платные они или фришные я так и не понял, поэтому беру иконки с другого сайта с указанием авторства, потом перевернул телефон, понял что то что на якорях не закреплено, съехало нахуй)) и как оно всё будет себя вести на другом телефоне тож хз, потому что AVD требует 70гб памяти, а у меня на линухе столько нету, и тестирую на своём телефоне, если есть опция запретить поворот, было бы найс. Я просто вот вот пришёл к андроид разработке после qt десктопа на уровне лаб универа (а-ля сделать графический редактор фоток и тд), и понял что вот это наиболее доставляет пока что, поэтому и пытаюсь понять куда двигаться и что делать, и не особо знаком пока со всеми правилами.
Аноним 24/07/20 Птн 14:41:10 175921348
>>1759188
двачую
>>1759206
>просто я хз они иконки предоставляют, а платные они или фришные я так и не понял
Our icons are free for everyone to use. Please don’t try to sell them.
https://material.io/resources/icons/?style=baseline
>AVD требует 70гб памяти
Ты про дефолтный? Я от него отказался ровно в тот момент, когда впервые появилась ошибка конфигурации девайся, связанная с boot-типом и ключами, что либо фиксится на какое-то время, а затем появляется вновь, либо не фиксится. слишком много проблем с ним Использую Genymotion, очень лёгкий и удобный.
Аноним 24/07/20 Птн 14:48:35 175921749
Аноним 24/07/20 Птн 18:17:04 175937350
>>1759140
1) Каким образом я это сделаю, если источник этих данных внутри foreground service? Предлагаешь binding и intetns? А почему тогда всякие базы данных и репозитории можно хранить внутри application и вызывать откуда угодно, а здесь так нельзя?
Аноним 24/07/20 Птн 18:27:29 175937951
>>1759373
Алсо, если только сделать observeForever внутри ViewModel для той ливдаты, через которую данные с сервиса пиздячат.
Аноним 24/07/20 Птн 19:15:50 175941352
>>1759373
Ранее ты написал, что тебе нужно обозревать состояние, которое относится к данным уровня фреймворка(читай андроида) к этому же уровню относится сам сервис, поэтому не место в слое данных - он должен быть изолирован , так что с репозиторием тут нет ничего общего и ты можешь получать его прямо во viewmodel с помощью LifecycleService.AndroidViewModel нужна как раз для таких случаев, когда нужен доступ к контексту, хотя лучше стараться не использовать её
>>1759379
>сделать observeForever внутри ViewModel
Довольно костыльно, но пробуй. Повторюсь, что в идеале ты должен получить данные во viewmodel и положить их в livedata, чтобы они ушли в UI через observe. Пробуй разные подходы и адаптируй под свою архитектуру. А ещё лучше - изначально выбирать подход, исходя из имеющейся архитектуры
Вариантов тут реально много, но для того, чтобы выбрать подходящий, нужно понимать степень изолированности модулей в твоем коде. в большинстве гайдов ты вообще увидишь, что сервис связывают с жц актвити и жонглируют интентами/бандлами
Аноним 24/07/20 Птн 19:20:53 175942153
Братишки, как дела с андроид фрилансом? Дохуя ли работы? Нормальные ли рейты? Можно ли с заебавшего тырпрайза вкатиться по бырому? Или нужно пару лет отсидеть в офисе?
Аноним 24/07/20 Птн 19:31:24 175942954
>>1759413
>сервис связывают с жц актвити и жонглируют интентами/бандлами
Это же ужасно! Для передачи данных в сторону сервиса можно использовать startService с интентом. Но вот в обратную сторону хочется эти данные через репозиторий гонять, который выдает livedata, на обновление которых я подпишусь в observe forever внутри ViewModel.
Аноним 24/07/20 Птн 20:19:57 175946155
>>1759429
Ужасно, но, как видишь, вариантов реализации много, всё зависит от требований.
К слову, иногда использование бандла позволяет существенно сократить количество кода и убрать лишнюю цепочку вызовов. Например, можно засунуть что-то в бандл, а оттуда в livedata, которая обозревается.
Аноним 25/07/20 Суб 16:16:47 175997856
Аноним 25/07/20 Суб 17:15:26 176002457
>>1759978
Кто ты ожидаешь что рейтанет? Тут одни вкатоиды.

мимо шел из крестотреда
Аноним 25/07/20 Суб 17:23:09 176003258
>>1760024
Какой-нибудь мимомидл, очевидно же.
Аноним 25/07/20 Суб 18:16:12 176005959
Аноним 25/07/20 Суб 20:01:29 176010560
>>1759978
1) presenter не должен пересоздаваться
2) вся логика со свитчем внутри презентера должна быть
3) зачем нужен презентер, когда сейчас вьюмодель в тренде
Аноним 25/07/20 Суб 21:54:30 176017061
API возвращает два объекта. Один объект, в котором лежит массив всех входных данных, имеет вид var message: Map(String, List<String>). Мне нужно ключи отоброзить в списке через адаптер. В другом окне при переходе отобразить список значений, списком тоже.
Как мне это распарсить? Что пихать в адаптер? И тут ещё ретрофит и рум. Как сделать так, чтобы POJO и еntity были разными классами?
Спасайте, поцоны.
Аноним 26/07/20 Вск 04:36:11 176038462
Аноним 26/07/20 Вск 04:37:03 176038563
>>1760105
>1) presenter не должен пересоздаваться
А где он там пересоздаётся?
Аноним 26/07/20 Вск 16:49:26 176082564
>>1760170
> var message: Map(String, List<String>)
val?

Делаешь репозитории с апи и руммом

Для каждого свои дата классы
И DTO для слоя бизнес логики и дальше

Репозитории отдают максимально простые структуры
Список строк там

Пихаешь в адаптер это
Аноним 27/07/20 Пнд 08:22:51 176123765
Аноним 27/07/20 Пнд 08:41:34 176124466
>>1761237
А, я понял, правильнее будет передавать его через onSavedInstanceState?
Аноним 27/07/20 Пнд 10:34:05 176136467
>>1761244
Там не остается тот же обьект
Аноним 27/07/20 Пнд 11:38:57 176140268
>>1761364
Ну да, там ссылка на него.
А как тогда?
Аноним 27/07/20 Пнд 17:12:34 176163369
>>1761402
Короч юзай viewmodel из aac, можешь даже свой презентер отнаследовать от него
Аноним 27/07/20 Пнд 19:43:44 176173170
image.png (4Кб, 494x133)
494x133
!ХЕЛП!

Есть один сикбар. Так вот если я тавлю ему padding start, то на канвасе проебываются все масштабы при перерисовавывании тогла. КАКОГО ХУЯ. Часов 6 решение ищу.
Пикрандом.
Аноним 27/07/20 Пнд 19:44:04 176173271
>>1761731
С меня 3 бочки нефти
Аноним 27/07/20 Пнд 21:50:23 176183072
>>1761731
Не трогай его вообще, меняй атрибуты его контейнера
Аноним 27/07/20 Пнд 21:58:09 176183873
Ребята, расскажите как дела с пиратством сейчас на Андроиде? Пиратят ли ваши аппы? Много ли убытков?
Аноним 28/07/20 Втр 01:07:34 176193774
Аноним 28/07/20 Втр 12:43:20 176218275
Анон, посоветуй книг для изучения Java. Начал с head first, но чувствую, что меня наебывают и это какое-то говно. Есть книжки с более структурированным изложением?
Аноним 28/07/20 Втр 14:56:40 176227476
>>1762182
Head First наиболее структурирован, как мне кажется. Начни читать другие книги и продолжай ту, которая зайдет, вот и всё.
Аноним 28/07/20 Втр 19:35:58 176252977
>>1759421
Не игнорьте мой пост, пожалуйста. Хотя смею предположить, что от подобных тем вас уже тошнит.
Аноним 29/07/20 Срд 10:06:57 176293178
Вопрос не по программированию, но я думаю, что вы как разработчики знаете на него ответ.

Значит у меня старый телибон Xperia Ведроид. Оттуда мне надо взять смски и сохранить их на компьютер.

Я пробовал это сделать с помощью программы Xperia Companion, там пытался backup сделать смс сообщений. Но программа все время отваливается и говорит, что backup смс был неудачный. Интуитивно я думаю, что телибон слишком старый, и программа не умеет с ним контактировать.

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

Заранее спасибо, пожалуйста, ответьте на мой ответ.
Аноним 29/07/20 Срд 12:55:59 176307479
Аноны, я мимо макака-бекендер php + nodejs.
Хочу немного окунуться в мир мобильной разработки.

серверную часть на пхп || ноде пишут?

Может начать с какого нибудь фреймворка флатер или реакт нэйтив?
Реакт я знаю немного по вэбу.


Аноним 29/07/20 Срд 13:08:34 176309080
>>1763074
>серверную часть на пхп || ноде пишут?

Хоть на чем

>Может начать с какого нибудь фреймворка флатер или реакт нэйтив?

Так можно делать только простые приложения
Коммерчески это все почти не используется
Аноним 29/07/20 Срд 13:14:29 176309781
>>1763090
Хм...
А посредством флатер или реакт нэйтив я смогу понять как вообще работать с системными механизмами в андроид? Или там все это зарыто в абстракции? Или при работе с джавой все тоже зарыто в абстракции?

Попердолиться может с Джавой тогда, говорят современный пхп довольно сильно на нее похож. Может быстро разгребусь. а еще айфоны блядь

Аноним 29/07/20 Срд 13:16:33 176310082
>>1763097
>>Или там все это зарыто в абстракции?
туплю, они же мультиплатформа. Значит полюбому все - абстракция
Аноним 30/07/20 Чтв 14:53:40 176435483
Screenshot from[...].png (308Кб, 1920x1080)
1920x1080
Screenshot from[...].png (325Кб, 1920x1080)
1920x1080
pic3.png (491Кб, 1061x850)
1061x850
Анон, подскажи ньюфагу.
Хочу сделать добавление элементов интерфейса программно. По клику на "ADD" появляется новый столбец в контент-части. Столбец, в идеале, занимает всё пространство контент-части. Когда появляется новый столбец - пространство делится между всеми столбцами поровну.

Задизайнил это в студии.
Если я добавляю элементы вручную в дизайнере, то всё работает как надо, пик 1.
Если я добавляю программно, то всё работает не так как запланировано, пик 2.
Код вставки - пик 3.
Вставляемый XML - https://pastebin.com/yB0a2R5T

Что делать, в чём моя ошибка?
Аноним 30/07/20 Чтв 14:55:29 176435584
Как в XML Сделать линию с закругленными краями?
Аноним 30/07/20 Чтв 15:28:14 176437085
>>1764354
Решение ужасное
Убирай из xml всё лишнее, оставь только кнопки для управления. Затем создай контейнер(ресайклер, например) во фрагменте и добавляй новый айтем, который будет создавать вьюху. Так ты не просто создашь вьюху, но и сможешь манипулировать айтемом в целом, читай: задавать поведение, управлять жц.
>>1764355
>линию с закругленными краями
Это как?
Если ты имеешь в виду края вьюхи, гугли shape, если речь идет о холсте, пикселях и т.д. - гугли сглаживание для своего кейса.
Аноним 30/07/20 Чтв 15:40:17 176437786
>>1764370
>Убирай из xml всё лишнее, оставь только кнопки для управления. Затем создай контейнер(ресайклер, например) во фрагменте и добавляй новый айтем, который будет создавать вьюху. Так ты не просто создашь вьюху, но и сможешь манипулировать айтемом в целом, читай: задавать поведение, управлять жц.
Спасибо, сейчас буду пробовать.
Аноним 30/07/20 Чтв 16:08:39 176438987
>>1764370
>Если ты имеешь в виду края вьюхи, гугли shape
Ну, как оказалось корнерсы можно задать только ректанглу, так что прийдется танцевать с бубном. Канвас не вариант.
Аноним 30/07/20 Чтв 20:41:23 176456388
Студент 3 курса, знаю на среднем уровне яву, базово кресты, базовые паттерны проектирования, немного питона, линал, матлаб. ХОРОШО РАЗБИРАЮСЬ В UI И MATERIAL DESIGN
Под ведро никогда не прогал. Реально за пару месяцев по гугловским курсам базовые вещи изучить и устроиться на джуна по 10$/h? По удаленке
Спс
Аноним 31/07/20 Птн 09:39:47 176477289
>>1764563
>базовые паттерны проектирования
Есть сорцы твоих проектов, где ты их применял?
Аноним 31/07/20 Птн 11:43:38 176482090
хуявей хочет чтобы я залил туда свою поделку. какие подводные? Все что на гугл сервисах сламается?
Аноним 31/07/20 Птн 11:52:34 176482791
>>1764772
Зачем тебе мои сырцы, лол? Адаптер, фабрика, че там особо сырцить
Аноним 31/07/20 Птн 20:10:44 176521292
>>1764563
Нет. Нереально. Ведройд по знаниям сравним с вебом. Без либ ты далеко не уедешь.

Чтобы наслаждаться SDK нужно либо в иос, либо в скалу, либо в ерланг.
Аноним 31/07/20 Птн 21:08:28 176524693
>>1765212
Т.е. айосу за 2-3 месяца научиться можно?
Аноним 01/08/20 Суб 05:58:54 176535994
>>1764827
Мне они не нужны. Они нужны работодателю
Аноним 01/08/20 Суб 12:30:25 176544495
>>1764563
>по гугловским курсам базовые вещи изучить и устроиться на джуна по 10$/h? По удаленке
>2020

Лол))0))
Аноним 01/08/20 Суб 12:31:04 176544596
>>1765444
>по 1.5$/h? По удаленке
Пофиксил
Аноним 01/08/20 Суб 12:35:39 176544797
>>1759421
>андроид фрилансом
Ну имхо сейчас с 0 в фриланс вкатиться можно только в вебе. Особенно там не востребована нативная ведроид-разработка на жабе/котлине. Вкатись в реакт, научись быстро клепать говно и под ведро и под айос - перспектив на фрилансе в 10 раз больше.
Аноним 01/08/20 Суб 12:39:03 176544998
>>1759010
>2) В чем практический смысл Dependency injection, особенно Dagger 2?
В выкачивании бабок с заказчика с аргументом "нужно время на внедрение еба-технологии"
Аноним 01/08/20 Суб 12:57:26 176546999
>>1765449
Слишком толсто, чересчур.
Аноним 01/08/20 Суб 13:48:33 1765497100
>>1765469
Ну если СИРОЗНЕЕ - то если это
1) проект на год+
2) будут unit/ui-тесты

То да, имеет смысл встраивать в архитектуру di

Аноним 01/08/20 Суб 14:16:33 1765513101
>>1765447
а в чем проблема с фрилансом под андроид? я захожу на апворк, фл.ру и там всегда полно работы
Аноним 01/08/20 Суб 15:24:59 1765544102
>>1765497
Это удобно, тестируемо и масштабируемо, поэтому имеет смысл использовать di в любом случае, будь то маленький или большой проект. И нет разницы в том, делает ли это фреймворк, потому что хорошая архитектура нуждается в ограничениях и изолированности, которые предоставляет di. Говоря о фреймворках, нет смысла отказываться от потенциальной экономии времени и ресурсов, упрощенного сопровождения, потому что накладные расходы внедрения минимальны, говоря о новых проектах. При внедрении в легаси проекты ты тратишь чуть больше ресурсов на старте, но в итоге получаешь плато, которое позволяет расширять проект с минимальными затратами, имея оттестированные компоненты, что также сокращает потенциальные расходы.
Аноним 01/08/20 Суб 23:43:06 1765944103
>>1765544
>тестируемо и масштабируемо
Нууу, т.е. под проект с тестами и определенным масштабом.
Аноним 02/08/20 Вск 02:19:05 1765993104
>>1765944
Любой коммерческий продукт. Понятно, что в своих поделках, можно делать как угодно.
Аноним 02/08/20 Вск 11:05:24 1766103105
Аноним 02/08/20 Вск 20:29:34 1766601106
Ананасы, вопрос такой.
Раньше никогда ничего под андроид не писал, но вот решил тут попробовать изучать vulkan апи такое графическое, комп у меня говно.
А вот чип в телефоне вроде как поддерживает, правда как проверить драйвера и прочее - хз.
Так вот, может быть где-то есть где-то туторы и гайды как вести разработку без монструозной андроид студии (пускай даже в блокноте, похер) и создании апкшки?
Аноним 02/08/20 Вск 21:59:22 1766662107
>>1766601
Гугли что-то типа build android from comand line, видел много статьей, если хочешь понять что куда.
Как написал всю хуйню в блокноте можешь в консольке ебнуть ./gradlew :my-super-app:installDebug это соберет и установит апку на подключенный девайс.
Аноним 03/08/20 Пнд 02:29:42 1766782108
image.png (83Кб, 1920x1040)
1920x1040
image.png (84Кб, 3959x939)
3959x939
image.png (22Кб, 1078x684)
1078x684
image.png (20Кб, 1078x684)
1078x684
Сап, /пр, долбоёб на линии. Нихуя толком не умею и не понимаю, возникла надобность скачать исходники приложения с гитхаба и чутка поправить пару менюшек, чтобы убрать оттуда лишние пункты.
Я скачал android studio, установил её, скачал исходники в zip-файле, распаковал, запустил студию, выбрал "open existing android atudio project". Оно вроде открылося, но дальше янихуянепонел.
Начались всякие проблемы при попытке собрать проект без каких-либо изменений, при попытке создать эмулятор андроида.
Пикрелейтед1 - сразу после открытия и попытки собрать.
Пикрелейтед2 - если нажать на ссылку "Update NDK version to 21.3.6528147 and sync project" в пикрелейтеде1
Пикрелейтед3 - окошко добавления конфигурации, что в нём вообще нужно выбирать? Если я выбираю "android app", мне дальше нужно выбрать какой-то модуль, но в списке нет модулей нихуя. Пикрелейтед4 собственно оно.

Как мне ПРОСТО настроить эту студию и ПРОСТО собирать приложение? Мне надо-то сделать всего несколько правок, ёбана. Автор, точнее тот человек, кто сейчас занимается этим приложением, сказал, что не использует IDE и ничего не может подсказать по этому поводу. Щито мне делать и как добиться желаемого?
Аноним 04/08/20 Втр 16:48:15 1768342109
Парни, есть у кого база модеров и ботов плей маркета?
Аноним 06/08/20 Чтв 21:00:42 1770269110
Мне 17. !8 будет не скоро. Гугл плей требует паспорт гражданина РФ. Че будет, если скинуть им фейковый скан паспорта?
Аноним 06/08/20 Чтв 21:04:30 1770274111
>>1770269
Есть еще студенческий, могу его сейчас попробовать отправить
Аноним 06/08/20 Чтв 23:58:40 1770390112
Я хочу чтобы некоторые языки использовали 1 хмл файл со стрингами. Например, чтобы русский был у тех у кого на телефоне стоит белорусский или казахстанский язык. Как это можно сделать? Не хочется тупо копировать хмл в новые файлы, у меня 25к строк текста. Дефолтный язык - английский.
Аноним 07/08/20 Птн 00:08:49 1770394113
>>1770390
Наверн придется тупо копировать. Почитал что апп бандл не хранит все языки, а скачивает тока тот что нужно. Значит это не скажется на размере приложения.. Если есть лучшие решения, жду ответа.
Довольно популярная проблема, мне кажется, но в сети об этом почти нет инфы.
Аноним 07/08/20 Птн 00:49:30 1770413114
Есть ли способ сделать полностью полноэкранную активити? Чтобы даже по свайпу у краёв не показывались статусбар и навбар?
Второй вопрос: а сделать полностью прозрачную активити?
Аноним 07/08/20 Птн 10:36:49 1770632115
>>1770390
Ну походу норм никак, только костылить с
Locale current = getResources().getConfiguration().locale
А ваще с 7ого андроида, юзер может выбирать несколько языков. Если белорус не ярый патриот, то наверняка за белорусским будет стоять русский, и потом английский. Ну и дроид будет смотреть что есть в аппе.
Аноним 07/08/20 Птн 12:18:10 1770720116
>>1770274
Студенческий не приняли. Буду в наглую говорить, что мне нет 18 и отошлю пасспорт
Аноним 07/08/20 Птн 13:18:58 1770830117
>>1770413
>полностью полноэкранную активити
>не показывались статусбар и навбар
Через стиль, либо через флаги WIndowManager'а.(Window в 21+) У Навбара свои флаги.
> полностью прозрачную активити
То же самое, только дёргаешь транспарентность.
На кой хер она тебе?
Аноним 07/08/20 Птн 16:15:48 1771035118
Немного нестандартный вопрос.
Нужен ноутбук для стажировки в компанию.
Какой самый дешевый ноут можно взять для андройд студии?
Аноним 07/08/20 Птн 17:01:02 1771103119
1596808860022.jpeg (963Кб, 1440x2880)
1440x2880
>>1770632
Я тестил, все равно показывает инглиш. Поставил языки болгарский и второй русский, в проге же язык все равно инглиш. Буду гуглить что не так.
Юзаю values-b+ коды и все равно нихрена.

Инстукция по этим кодам - 20 страниц непонятного пиздеца.

Кароче, искал и ничего не нашел чтоб работало как надо. Эта хуйня со сменой языков на андроид 7, если их указано несколько, работает не так как хочется, переводит только некоторые из стрингов, например кнопки в боттомнавигейшнвьюв, но все остальное нет. И работает только если указать resConfigs "en", "ru", "ua"... и тд в грандл файле.
Нашел эту подсказку с resConfigs тут: http://developer.alexanderklimov.ru/android/locale.php пикрил. Но эта опция "auto", которую автор говорил юзать, удалена разрабами потому что нестабильно работала и если ее написать выбивает ошибку. Одним словом, трудно разобраться.

Вручную менять локали насильно тоже не хочу, это ультра нестабильно реализовано в ведре, постоянно меняется реализация, много где советуют не вникать в это дерьмо.

Буду копипастить .хмл файлы прост и потестирую сможет ли аппбандл отдавать только необходимые стринги не увеличив размер в плейсторе для закачки на 50 мб. Надеюсь меня гугл не забанит за то что фактический язык не будет соответствать тому что я указал в хмл.
Аноним 08/08/20 Суб 09:44:36 1771655120
Анон, хелп. Делаю приложение, которое хранит список людей с некоторыми атрибутами и пикчей в SQLite. Пикчи храню ввиде текстовой ссылки, когда достаю их из базы конвертирую в Uri
Суть проблемы:
Когда лью сылку на пикчу в БД, а потом оттуда выгружаю, то все работает хорошо и отображается в imageView. Но если закрыть приложение, а потом открыть, то Uri из БД выгружаются точно такие же, но в imageView почему-то не отображаются
Аноним 08/08/20 Суб 13:39:54 1771729121
>>1771655
Разобрался. При запуске активити с выбором картинки нужно было писать action_open_document, вместо action_open_image
Второй вариант дает права на документ только один раз, первый навсегда
Аноним 10/08/20 Пнд 19:14:43 1773519122
Знаю, вопрос не по программированию, но где еще спросить не знаю.
Подскажите, установятся ли линуксовые драйвера от USB-ишной сетевой карты TP-Link UE200 на смартфон с Android 10? И как это сделать?
Аноним 10/08/20 Пнд 21:04:44 1773587123
Аноним 11/08/20 Втр 09:36:22 1773824124
>>1773587
Какой бюджет? Ноут с 8гб озу и пятым райзеном можно взять за 40к и дешевле, чего вполне достаточно для комфортной работы.
Из бюджетных я бы смотрел в сторону какого-нибудь VivoBook
Аноним 11/08/20 Втр 21:56:56 1774693125
Аноним 11/08/20 Втр 23:14:00 1774749126
>>1773519
поставь линуху, из-под нее запусти
Аноним 12/08/20 Срд 02:00:44 1774797127
Здравствуйте, андроидобояре, будет ли нормально работать Андроид Студио на процессоре типа Ryzen 2200g, 3200g ?
Аноним 12/08/20 Срд 13:02:57 1775015128
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов