Вот с помощью ViewModel и LiveData я могу создать один статический лейаут и биндить в него данные, когда они будут готовы в модели.
Но как, блять, мне создать ДИНАМИЧЕСКИЙ лейаут? То есть мне надо по событиям из модели не просто биндить данные в готовые вьюхи, но и полностью перерисовывать лейаут. То есть, менять/удалять/добавлять вьюхи динамически на лету, а не просто инфлейтить xml'ку.
>>1750680 Пока что придумал такой костыль метод: в лейауте задавать сразу все возможные view, но управлять их видимостью программно.
Вроде это даже считается дефолтным подходом для показа ProgressBar'а. Тип показать его поверх вьюхи, а потом скрыть, лол, так даже в офф-руководстве гугла написано.
интересна тема android разработки , что нужно изучать для того что бы плавно вливаться в разработку , начинать практиковаться и не было каши в голове.
уже точно понял что нужно начать с джавы , а потом начать изучать котлин , так как второе вытекает из первого и будет проще понять котлин имея хорошую базу на джаве. Но дальше в силу того что я зелен как трава в чистом поле , начинаю путаться в тонне названий . понял что надо изучать будет : 1)Git 2)Аpi 3)Sql
Есть один json с сервера, который я маплю в объекты и сохраняю в бд с помощью room. Иногда эти объекты надо обновлять, делая повторный запрос к серверу. Сильно ли скажется на производительности если я буду просто удалять старые объекты из бд и записывать новые? Или лучше взять старые объекты из бд, сравнить с новыми и обновить если есть изменения?
Тут такая хуйня, RecyclerView рандомно сохраняет части комплексной вьюхи, если они не были перебиндены в onBindViewHolder Например, если у треда нет изображения, оно там может с нихуя появится из прошлого треда RecyclerView же переиспользует как-то элементы списка? Выглядит, как будто если я не перебиндил каждый элемент, то он может остаться тем же, что и был до этого То есть, если в прошлом треде я задал holder.imageViewPostImage, а в этом не задал, то там может остаться изображения с прошлого Это норма?
Сеньор-архитектор снова в ожившем треде, чтобы ответить на ваши вопросы Оп, как можно было проебать шапку? >>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 всего лишь отображает данные, которые байндятся к позиции, так что всё зависит от того, чем и как ты его кормишь.
>>1755611 >Что у тебя за задача? Как ты пришел к идее "перерисовывания"? У меня BLOC-паттерн. Ну или упрощенно - стейт-система по типу Redux в жопаскрипте. Суть в том, что интерфейс полностью соответствует текущему state.
if (state = LoadingState) рисуем прогресбар if (state = ErrorState) рисуем ошибку if (state = SuccessState) рисуем списочек
Сейчас у меня в этом месте несколько костыльно, ибо onCreateView() вызвается лишь 1 раз, а логичнее, чтобы интерфейс перерисовывался для каждого стейта.
Сейчас же у меня тупо progressbar скрыт и появляется поверх пустого списочка, а ошибка показывается снекбаром. Короче, мне надо полностью перерисовывать интерфейс полсе того, как он был нарисован в onCreateView(). Не обязательно вручную, но надо переинфлейтить xml'ку
>>1755795 >У меня BLOC-паттерн >стейт-система по типу Redux Если провести аналогию с BLoC, твой стейт должен реагировать поток данных, которые ты получаешь, будь то ViewModel или RX, где ты можешь вызывать коллбэки в зависимости от состояния Observable/Flowable. Соответственно, если ты используешь single activity, в активити у тебя будут оверрайд методы onSuccess, onLoading, onFailure от интерфейса, который она экстендит . В этих методах ты управляешь видимостью прогрессбара(он есть только в главной активити, т.к. она является контейнером с общей логикой отображение) и загружаешь нужный экран фрагмент для пользователя, в зависимости от состояния. Если источник данных не поймал success, пользователь просто не попадёт во фрагмент со списком.(с RX это делается красиво) Это общий принцип и важно понимать, что реализация зависит от используемой тобой архитектуры. но он хорошо масштабируется >onCreateView() вызвается лишь 1 раз, а логичнее, чтобы интерфейс перерисовывался для каждого стейта Не логичнее, это дорого, да и незачем лишний раз трогать жизненный цикл вьюхи. У тебя есть контейнер, который ожидает данные - он итак пустой, если их нет. Ты должен показать его пользователю, если они есть. Почитай об MVI.
>>1755829 >Если провести аналогию с BLoC, твой стейт должен реагировать поток данных, которые ты получаешь, будь то ViewModel или RX, где ты можешь вызывать коллбэки в зависимости от состояния Observable/Flowable Вот именно это и происходит. Есть BlocViewModel : ViewModel, где есть метод mapEventToState(event: EventInterface): Flow<StateInterface> Далее немного магии и преобразований и фрагмент подписывается на LiveData с этими стейтами. Ну, как ты понимаешь, очень важно, что может быть только 1 актуальный стейт, не может быть сразу двух активных стейтов.
Вот в идеале этот обсервер стейтов должен быть чистой функцией, выдающей интерфейс в ответ на стейт, но пока это нихуя не выходит и приходится скрывать/показывать уже существующие в лейауте вьюхи, например, тот же прогресс-бар.
>загружаешь нужный фрагмент для пользователя, в зависимости от состояния Вот юзать отдельный фрагмент на каждое состояние выглядит дорого и геморно... Или нет? Надо создать класс для фрагмента, xml для него... Хотя... С другой стороны, отлично ложиться на чистоту обсервера стейтов - он будет просто высирать по фрагменту на стейт.
>>1755851 >очень важно, что может быть только 1 актуальный стейт, не может быть сразу двух активных стейтов. Ты можешь просто создать observer внутри фрагмента, проинициализировать в нём же интерфейс OnLoadState в onCreateView/onAttach и вызывать state.onSuccess(коллбэк), когда livedata.value не null. (адаптируй под флоу пользователя) >Вот в идеале этот обсервер стейтов должен быть чистой функцией Вот смотри, в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар. Ты обозреваешь данные, а не стейты. Стейты отвечают за доступ, а твоя задача - сообщить о том, что вот тут будет такой-то стейт. >Вот юзать отдельный фрагмент на каждое состояние выглядит дорого и геморно Ты, похоже, не понял меня. Пример: Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2. Ты мыслишь не в той плоскости, потому что всё то, что не связано с данными, которые могут отсутствовать, или условиями, которые могут не быть соблюдены(как успешная аутентификация), детерминировано.
>>1755829 >>1755865 >Почитай об MVI. Почитал, все те же вариации на тему реактивщины под другим соусом, что и в Redux и в BLOC. Никакой новой инфы не узнал. Суть везде та же.
>в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар. То есть, глобальный обработчик стейтов, один на все приложение?
Вообще, я, да и не только я, разделяю понятие стейта и побочного эффекта. Стейт - это то, что остается после изменения конфигурации. Перевернул экран - списочек все тот же. Побочный эффект же характерен тем, что возникает только 1 раз, при этом стейт не меняется. К этому относятся показ снекбара, диалога, осуществление навигации на другой фрагмент и т.п.
>Ты обозреваешь данные, а не стейты Вот тут не понял. Стейт же и есть данные для UI.
Но смотри, с какими проблемами я сталкиваюсь при работе со всей этой реактивщиной и стремлением к максимальной чистоте функций. 1) Если сделать полную перерисовку интерфейса в ответ на стейт (обсервер стейтов идеальная чистая функция), то при изменении конфигурации будет сброшена, например, позиция списка, потому что он фактически перерисован заново. Хотя ее тоже можно сделать частью стейта, но по мне так это больше деталь реализации UI и об этом вообще я думать не должен. 2) Если обсервер стейтов не чистая функция, то возникают непредсказуемые побочные эффекты, теряется контроль над фактическим состоянием UI, он перестает соответствовать объекту стейта.
>Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2 Ну вот, ты вновь не отделяешь стейт от побочного эффекта. По твоей схеме onLoading тоже должен был являться стейтом и породить свой фрагмент. Но вообще, именно с осоознанно созданными побочными эффектами у меня проблем нет, потому что они обрабатываются отдельно от стейтов и стейт не меняют
Ну и еще, если создать глобальный обработчик событий и стейтов, то каждое событие и каждый стейт должны быть уникальными. Сейчас у меня есть универсальные события типа ListItemClicked, которые могут иметь разный смысл в контекте разных BlocViewModel.
>>1755865 >Ты можешь просто создать observer внутри фрагмента, проинициализировать в нём же интерфейс OnLoadState в onCreateView/onAttach и вызывать state.onSuccess(коллбэк), когда livedata.value не null. (адаптируй под флоу пользователя) Вот про это по-подробнее, плиз.
Еще есть охуенная проблема, как все эти стейты и реактивность положить на жизненный цикл ведра и его особенности. Например, те же фрагменты
>>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 слой.
>>1756158 Смотри, у меня сейчас точкой входа является фрагмент.
Фрагмент сразу же рисует RecyclerView с пустыми данными и отправляет событие Initialized в модель. Модель в ответ на это событие начинает грузить данные и эмитит стейт Loading, затем стейт Success со ссылкой на данные (которые все еще в самой моделе). Фрагмент ловит стейт Success и тупо заменяет тот пустой лист-плейсхолдер на эти данные (по ссылке).
Еще у меня стоят коллбеки на свайпы элементов списка, которые тупо отправляют соответствующие события в модель. Модель в ответ на них удаляет или изменяет ДАННЫЕ (которые хранятся в самой моделе) и отправляет действие (я так называю побочный эффект) о том, что элемент, допустим удален. Фрагмент ловит это действие и нотифит адаптер о том, что данные изменились. И интерфейс листа красиво показывает анимацию удаления элемента. Фишка в том, что стейт-то не изменился. Просто побочный эффект привел к изменению самих данных. Стейт, способ отображения UI каким был, таким и остался, удали хоть все элементы.
Несмотря на кажущуюся всратость, это оказалось на редкость живучей хуйней, которая позволяет мне лавировать между всеми этими колбеками, адаптерами и побочными эффектами.
Но только прикол в том, что фактически стейт у меня на фрагмент всегда один, хотя их может быть тип много.
Вот в идеале надо бы как-то это в коде обозначить, что стейт = фрагмент, всегда. Тогда возникает вопрос с точкой входа. Сейчас это сам этот фрагмент.
Но в идеале точка входа должна быть какой-то другой. Чтобы некая хуйня обсервила стейты и в ответ на каждый запускала фрагмент. То есть, чтобы если модель выдала ошибку - сразу и нарисовался фрагмент ошибки, а если норм данные - то сразу запустился фрагмент с норм данными. НО. Тут еще дело в том, что как именно эти фрагменты запускать. Потому что иногда мне надо в пределах того же ЭКРАНА полностью перерисовать интерфейс, то есть таки сменить стейт, а иногда мне надо запустить навигацию на новый фрагмент, чтобы он остался в стеке переходов.
То есть, поменять стейт без перехода в рамках того же "экрана" или же перейти на новый фрагмент-экран...
>>1756473 Распишу подход, мб пригодится и что-то применишь. Если пилить по чистой архитектуре: Модель должна содержать только описание объектов, репозитория(абстракцию) и юзкейсы для получения данных в презентере/viewmodel. Данными ты манипулируешь(получаешь тем или иным способом, кэшируешь и т.д.) в другом слое(с реализацией абстрактного репозитория), где могут быть мапперы для модели и всё то, что делает модуль максимально изолированным, но нет андроида - он во view слое, где и viewmodel(которая реализует юзкейсы). Всё это позволяет сильно упростить жизнь. Интересно, как у тебя выглядит фрагмент ошибки? И зачем ей свой фрагмент? Точка входа - активити, которая ловит коллбэки(loadNameScreen, где тебе прогрессбар/диалог/снэкбар и все остальное) и навигейтит во фрагменты через navhost(тут же легко реализуется бэкстэк и бандл, куда можно что-то передать, к примеру, флаг, который будет влиять на отображение компонентов внутри фрагмента). Сделать god object'ом активити в этом случае очень сложно, если ограничиться навигацией. Работать с таким кодом приятно.
>>1750676 (OP) подскажиет, обязательно делать приложение по правилам material дизайна чтобы оно выглядело как нативное андроид приложение, я на qml делаю макет сейчас, и вот делаю дизаин как мне нравится, но набрёл на правила material дизайни и хуй знает, подстраиваться ли, или делать так как в голове вырисовалось.
1) Если я хочу отображать состояние из Foreground Service в UI через LiveData, то должен ли сервис непосредственно вызывать метод postValue и передавать туда новый экземпляр объекта, который описывает состояние?
2) В чем практический смысл Dependency injection, особенно Dagger 2?
>>1750676 (OP) Привет. Пытаюсь создать в новый build type в gradle. Прописал его в buildTypes, создал директорию в src с AndroidManifest итд. Но он не появился в assemble tasks. Что я делаю не так?
>>1758881 да, я это понимаю что слишком тонкий хедер и в футер лучше бы ещё что то добавить чтобы 3 кнопки было, но вопрос у меня стоит в том: нужно ли всем правилам следовать или можно юзать свои иконки вместо material иконок и свои идеи в некоторых местах?
>>1759010 1) Ты должен вызывать postValue с состоянием во viewmodel, обозревая livedata в UI. 2) Реализует DI-паттерн, сокращает количество кода, генерируя dagger и hilt, другие же реализуют паттерн service locator и дергают зависимости без подробностей реализации, когда зависимый объект в них нуждается логику создания объектов(фабрики для viewmodel, например) и позволяя создавать новые объекты с помощью аннотаций. создает граф зависимостей Упрощает работу с зависимостями в самом коде и тестах. >>1759067 Нужно или нет - решать тебе, суть material в самой концепции взаимодействия компонентов интерфейса, образующих "материальный дизайн". Он просто предоставляет тебе инструменты и гайдлайны. Я стараюсь придерживаться, если это возможно.
>>1758834 Если твой уровень понимания UX на пике - то делай строго по material и не еби мозг пользователям. UX designer - это как бы професия, за это деньги платят и там есть что изучать что бы хуй ложить на метериал.
>>1759188 ну у меня уровень понимания UX скорее на хуях чем на пике, ну думаю сделаю макет руководствуясь изредка material, просто я хз они иконки предоставляют, а платные они или фришные я так и не понял, поэтому беру иконки с другого сайта с указанием авторства, потом перевернул телефон, понял что то что на якорях не закреплено, съехало нахуй)) и как оно всё будет себя вести на другом телефоне тож хз, потому что AVD требует 70гб памяти, а у меня на линухе столько нету, и тестирую на своём телефоне, если есть опция запретить поворот, было бы найс. Я просто вот вот пришёл к андроид разработке после qt десктопа на уровне лаб универа (а-ля сделать графический редактор фоток и тд), и понял что вот это наиболее доставляет пока что, поэтому и пытаюсь понять куда двигаться и что делать, и не особо знаком пока со всеми правилами.
>>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, очень лёгкий и удобный.
>>1759140 1) Каким образом я это сделаю, если источник этих данных внутри foreground service? Предлагаешь binding и intetns? А почему тогда всякие базы данных и репозитории можно хранить внутри application и вызывать откуда угодно, а здесь так нельзя?
>>1759373 Ранее ты написал, что тебе нужно обозревать состояние, которое относится к данным уровня фреймворка(читай андроида) к этому же уровню относится сам сервис, поэтому не место в слое данных - он должен быть изолирован , так что с репозиторием тут нет ничего общего и ты можешь получать его прямо во viewmodel с помощью LifecycleService.AndroidViewModel нужна как раз для таких случаев, когда нужен доступ к контексту, хотя лучше стараться не использовать её >>1759379 >сделать observeForever внутри ViewModel Довольно костыльно, но пробуй. Повторюсь, что в идеале ты должен получить данные во viewmodel и положить их в livedata, чтобы они ушли в UI через observe. Пробуй разные подходы и адаптируй под свою архитектуру. А ещё лучше - изначально выбирать подход, исходя из имеющейся архитектуры Вариантов тут реально много, но для того, чтобы выбрать подходящий, нужно понимать степень изолированности модулей в твоем коде. в большинстве гайдов ты вообще увидишь, что сервис связывают с жц актвити и жонглируют интентами/бандлами
Братишки, как дела с андроид фрилансом? Дохуя ли работы? Нормальные ли рейты? Можно ли с заебавшего тырпрайза вкатиться по бырому? Или нужно пару лет отсидеть в офисе?
>>1759413 >сервис связывают с жц актвити и жонглируют интентами/бандлами Это же ужасно! Для передачи данных в сторону сервиса можно использовать startService с интентом. Но вот в обратную сторону хочется эти данные через репозиторий гонять, который выдает livedata, на обновление которых я подпишусь в observe forever внутри ViewModel.
>>1759429 Ужасно, но, как видишь, вариантов реализации много, всё зависит от требований. К слову, иногда использование бандла позволяет существенно сократить количество кода и убрать лишнюю цепочку вызовов. Например, можно засунуть что-то в бандл, а оттуда в livedata, которая обозревается.
>>1759978 1) presenter не должен пересоздаваться 2) вся логика со свитчем внутри презентера должна быть 3) зачем нужен презентер, когда сейчас вьюмодель в тренде
API возвращает два объекта. Один объект, в котором лежит массив всех входных данных, имеет вид var message: Map(String, List<String>). Мне нужно ключи отоброзить в списке через адаптер. В другом окне при переходе отобразить список значений, списком тоже. Как мне это распарсить? Что пихать в адаптер? И тут ещё ретрофит и рум. Как сделать так, чтобы POJO и еntity были разными классами? Спасайте, поцоны.
Есть один сикбар. Так вот если я тавлю ему padding start, то на канвасе проебываются все масштабы при перерисовавывании тогла. КАКОГО ХУЯ. Часов 6 решение ищу. Пикрандом.
Анон, посоветуй книг для изучения Java. Начал с head first, но чувствую, что меня наебывают и это какое-то говно. Есть книжки с более структурированным изложением?
Вопрос не по программированию, но я думаю, что вы как разработчики знаете на него ответ.
Значит у меня старый телибон Xperia Ведроид. Оттуда мне надо взять смски и сохранить их на компьютер.
Я пробовал это сделать с помощью программы Xperia Companion, там пытался backup сделать смс сообщений. Но программа все время отваливается и говорит, что backup смс был неудачный. Интуитивно я думаю, что телибон слишком старый, и программа не умеет с ним контактировать.
Вопрос такой - как сохранить на компьютер смс с Андроид телефона так, чтобы можно было потом в будущем в нужный момент наоборот взять с компьютера сохраненные смс и заново вставить в телефон, чтобы эти смс отображались в телефоне.
Заранее спасибо, пожалуйста, ответьте на мой ответ.
>>1763090 Хм... А посредством флатер или реакт нэйтив я смогу понять как вообще работать с системными механизмами в андроид? Или там все это зарыто в абстракции? Или при работе с джавой все тоже зарыто в абстракции?
Попердолиться может с Джавой тогда, говорят современный пхп довольно сильно на нее похож. Может быстро разгребусь. а еще айфоны блядь
Анон, подскажи ньюфагу. Хочу сделать добавление элементов интерфейса программно. По клику на "ADD" появляется новый столбец в контент-части. Столбец, в идеале, занимает всё пространство контент-части. Когда появляется новый столбец - пространство делится между всеми столбцами поровну.
Задизайнил это в студии. Если я добавляю элементы вручную в дизайнере, то всё работает как надо, пик 1. Если я добавляю программно, то всё работает не так как запланировано, пик 2. Код вставки - пик 3. Вставляемый XML - https://pastebin.com/yB0a2R5T
>>1764354 Решение ужасное Убирай из xml всё лишнее, оставь только кнопки для управления. Затем создай контейнер(ресайклер, например) во фрагменте и добавляй новый айтем, который будет создавать вьюху. Так ты не просто создашь вьюху, но и сможешь манипулировать айтемом в целом, читай: задавать поведение, управлять жц. >>1764355 >линию с закругленными краями Это как? Если ты имеешь в виду края вьюхи, гугли shape, если речь идет о холсте, пикселях и т.д. - гугли сглаживание для своего кейса.
>>1764370 >Убирай из xml всё лишнее, оставь только кнопки для управления. Затем создай контейнер(ресайклер, например) во фрагменте и добавляй новый айтем, который будет создавать вьюху. Так ты не просто создашь вьюху, но и сможешь манипулировать айтемом в целом, читай: задавать поведение, управлять жц. Спасибо, сейчас буду пробовать.
>>1764370 >Если ты имеешь в виду края вьюхи, гугли shape Ну, как оказалось корнерсы можно задать только ректанглу, так что прийдется танцевать с бубном. Канвас не вариант.
Студент 3 курса, знаю на среднем уровне яву, базово кресты, базовые паттерны проектирования, немного питона, линал, матлаб. ХОРОШО РАЗБИРАЮСЬ В UI И MATERIAL DESIGN Под ведро никогда не прогал. Реально за пару месяцев по гугловским курсам базовые вещи изучить и устроиться на джуна по 10$/h? По удаленке Спс
>>1759421 >андроид фрилансом Ну имхо сейчас с 0 в фриланс вкатиться можно только в вебе. Особенно там не востребована нативная ведроид-разработка на жабе/котлине. Вкатись в реакт, научись быстро клепать говно и под ведро и под айос - перспектив на фрилансе в 10 раз больше.
>>1759010 >2) В чем практический смысл Dependency injection, особенно Dagger 2? В выкачивании бабок с заказчика с аргументом "нужно время на внедрение еба-технологии"
>>1765497 Это удобно, тестируемо и масштабируемо, поэтому имеет смысл использовать di в любом случае, будь то маленький или большой проект. И нет разницы в том, делает ли это фреймворк, потому что хорошая архитектура нуждается в ограничениях и изолированности, которые предоставляет di. Говоря о фреймворках, нет смысла отказываться от потенциальной экономии времени и ресурсов, упрощенного сопровождения, потому что накладные расходы внедрения минимальны, говоря о новых проектах. При внедрении в легаси проекты ты тратишь чуть больше ресурсов на старте, но в итоге получаешь плато, которое позволяет расширять проект с минимальными затратами, имея оттестированные компоненты, что также сокращает потенциальные расходы.
Ананасы, вопрос такой. Раньше никогда ничего под андроид не писал, но вот решил тут попробовать изучать vulkan апи такое графическое, комп у меня говно. А вот чип в телефоне вроде как поддерживает, правда как проверить драйвера и прочее - хз. Так вот, может быть где-то есть где-то туторы и гайды как вести разработку без монструозной андроид студии (пускай даже в блокноте, похер) и создании апкшки?
>>1766601 Гугли что-то типа build android from comand line, видел много статьей, если хочешь понять что куда. Как написал всю хуйню в блокноте можешь в консольке ебнуть ./gradlew :my-super-app:installDebug это соберет и установит апку на подключенный девайс.
Сап, /пр, долбоёб на линии. Нихуя толком не умею и не понимаю, возникла надобность скачать исходники приложения с гитхаба и чутка поправить пару менюшек, чтобы убрать оттуда лишние пункты. Я скачал 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 и ничего не может подсказать по этому поводу. Щито мне делать и как добиться желаемого?
Я хочу чтобы некоторые языки использовали 1 хмл файл со стрингами. Например, чтобы русский был у тех у кого на телефоне стоит белорусский или казахстанский язык. Как это можно сделать? Не хочется тупо копировать хмл в новые файлы, у меня 25к строк текста. Дефолтный язык - английский.
>>1770390 Наверн придется тупо копировать. Почитал что апп бандл не хранит все языки, а скачивает тока тот что нужно. Значит это не скажется на размере приложения.. Если есть лучшие решения, жду ответа. Довольно популярная проблема, мне кажется, но в сети об этом почти нет инфы.
Есть ли способ сделать полностью полноэкранную активити? Чтобы даже по свайпу у краёв не показывались статусбар и навбар? Второй вопрос: а сделать полностью прозрачную активити?
>>1770390 Ну походу норм никак, только костылить с Locale current = getResources().getConfiguration().locale А ваще с 7ого андроида, юзер может выбирать несколько языков. Если белорус не ярый патриот, то наверняка за белорусским будет стоять русский, и потом английский. Ну и дроид будет смотреть что есть в аппе.
>>1770413 >полностью полноэкранную активити >не показывались статусбар и навбар Через стиль, либо через флаги WIndowManager'а.(Window в 21+) У Навбара свои флаги. > полностью прозрачную активити То же самое, только дёргаешь транспарентность. На кой хер она тебе?
>>1770632 Я тестил, все равно показывает инглиш. Поставил языки болгарский и второй русский, в проге же язык все равно инглиш. Буду гуглить что не так. Юзаю values-b+ коды и все равно нихрена.
Инстукция по этим кодам - 20 страниц непонятного пиздеца.
Кароче, искал и ничего не нашел чтоб работало как надо. Эта хуйня со сменой языков на андроид 7, если их указано несколько, работает не так как хочется, переводит только некоторые из стрингов, например кнопки в боттомнавигейшнвьюв, но все остальное нет. И работает только если указать resConfigs "en", "ru", "ua"... и тд в грандл файле. Нашел эту подсказку с resConfigs тут: http://developer.alexanderklimov.ru/android/locale.phpпикрил. Но эта опция "auto", которую автор говорил юзать, удалена разрабами потому что нестабильно работала и если ее написать выбивает ошибку. Одним словом, трудно разобраться.
Вручную менять локали насильно тоже не хочу, это ультра нестабильно реализовано в ведре, постоянно меняется реализация, много где советуют не вникать в это дерьмо.
Буду копипастить .хмл файлы прост и потестирую сможет ли аппбандл отдавать только необходимые стринги не увеличив размер в плейсторе для закачки на 50 мб. Надеюсь меня гугл не забанит за то что фактический язык не будет соответствать тому что я указал в хмл.
Анон, хелп. Делаю приложение, которое хранит список людей с некоторыми атрибутами и пикчей в SQLite. Пикчи храню ввиде текстовой ссылки, когда достаю их из базы конвертирую в Uri Суть проблемы: Когда лью сылку на пикчу в БД, а потом оттуда выгружаю, то все работает хорошо и отображается в imageView. Но если закрыть приложение, а потом открыть, то Uri из БД выгружаются точно такие же, но в imageView почему-то не отображаются
>>1771655 Разобрался. При запуске активити с выбором картинки нужно было писать action_open_document, вместо action_open_image Второй вариант дает права на документ только один раз, первый навсегда
Знаю, вопрос не по программированию, но где еще спросить не знаю. Подскажите, установятся ли линуксовые драйвера от USB-ишной сетевой карты TP-Link UE200 на смартфон с Android 10? И как это сделать?
>>1773587 Какой бюджет? Ноут с 8гб озу и пятым райзеном можно взять за 40к и дешевле, чего вполне достаточно для комфортной работы. Из бюджетных я бы смотрел в сторону какого-нибудь VivoBook
Все работает вот только уведомление о событии выскакивает за 30 минут до самого события Как программно указать что я хочу получать уведомление скажем за 1 минуту до события?
Котаны, последнее время испытываю проблемы с градлевыми зависимостями.
Например: google-http-client-1.22.0, который нужен кому-то из инструментов сборки, резолвится в url jcenter.bintray.com/com/google/http-client/google-http-client/1.22.0/google-http-client-1.22.0.jar скачивается только из-под американских проксей, а напрямую d29vzk4ow07wi7.cloudfront.net бросает PR_IO_TIMEOUT_ERROR и хуй че сделаешь. И така хуйня постоянно.
>>1775430 Хромбуки поддерживают андроидстудио, если что. Но это больше для энтузиастов, вдруг там что-то будет работать не так как ты хочешь и ты скажешь что я посоветовал хуйню, но лично я возьму ноут или трансформер на хром ос. Но гугл рекомендует покупать хромбуки с ай5 процом и 8 гб озу для андроид студио. Но я думаю что и на более слабом железе вытянет.
>>1750676 (OP) Как-то я завис на многопоточности. Все эти AsyncTask, Handler, Service я еще могу понять. Но в чем смысл корутин и RX ? Нужно ли их изучать и что лучше использовать?
Говорят, что RXJava на все случаи достаточно. Но некоторые говорят, что вообще чисто AsyncTask используют и все. Что вы используете в проектах для многопоточности?
>>1778500 сам перекатываюсь в ведроид и тоже в ахуе со всего, особенно с всяких джетпаков андроидкс и прочтих аппкомпат, но насколько я понял, корутины дял котлина, а rx- для джавы. Для себя решил, что надо всё изучать последовательно от джавы и её обвязки на андроиде до котлина с его фичами
Привет. Я начинающий андроид-разработчик и моя мечта - работать на удаленке $10/h.
Заканчиваю гугловский Android Developer Nanodegree, до этого прошел Android Basics Nanodegree. Хочу сделать крутой проект, чтобы показать уважаемому барину-работодателю.
Суть такова. Наше приложение локально анализирует с помощью простой нейросетки интересы пользователя исходя из истории его браузера, парсит великое множество новостных источников в сети и выбирает новости по тем темам и тем персонажам, которые пользователю интересны. Каждый новостной источник из базы имеет рейтинг доверия и рейтинг качества самого контента - защита от желтой прессы, Рен-ТВ и Первого канала. К каждой новости прикреплена система комментариев на основе репутации.
Работа с историей пользователя локально, никаких законов о конфиденциальности не нарушается. Нейросеть, которая вычленяет наиболее частые топики из набора данных на инглише, я уже где-то видел на гитхабе, это прям простейшая штука и ресурсов почти не потребляет.
Какие могут быть проблемы? Ну или предложите другой интересный проект на несколько месяцев. Лично у меня была еще идея сделать современную борду, чисто для андроид-юзеров. Потому что смотришь на все эти макабы, вакабы, на сосач тот же - функционал и ui ужасно устаревшие, зумерам скоро будет нужно что-то поновее, иначе совсем все в ТикТок свалят.
>>1778637 Rx нужен в проектах с java или какими-то задачами, которые проще решить с помощью него или они лучше всего вписываются именно в rx-инфраструктуру больше вопрос гибкости, корутины для Котлина, но, опять же, иногда удобнее использовать rx, если он может покрыть потребности и позволить не тянуть лишние зависимости в проект, либо просто сделать его чище.
САП андроидач, вопрос такой, как мне запилить приложение калькулятор типа, что бы я мог считать вещи которые я постоянно считаю на работе на обычном калькуляторе, допустим короткие формулы типа pgh, ПR2H1 - ПR2H2, что бы не запоминать что от чего отнимать и на листке на записывать я хочу сделать себе хуйню на телефон, я это все делаю в екселе, но как перенести на свое ведро? Я мучаюсь, помогите пожалуйста, и еще я далбоёб, я постоянно забываю блокнот перед выходом, а на производстве считать приходится в цехе, и я как еблан запоминаю, и это очень долго все. А так бы я просто вписывал циферки и вылезало решение, только не посылайте нахуй, христом богом молю
>>1750676 (OP) Есть задача - отслеживать все нотификации в бекграунде. Есть NotificationListenerService. На чем его запускать? Стандартный Service или же WorkManager?
У меня в приложении есть recyclerView, в нём 350 элементов. Если посмотреть на выделение памяти элементов, то при создании его, не будет выходить за пределы даже 5 МБ,однако сам Fragment, на котором лежит RecyclerView загружается почти половину секунды. Пробовал в тред это закидывать, но RecyclerView же не может в бэкграунде ui переделывать. Чё делать чтобы грузилось быстрее?
>>1784996 О, класс. Стояла анимация перехода от одного фрагмента к другому, раньше из-за полсекундного лага её не было видно,хотя полсекундный лаг и остался, но зато теперь анимация видна, так что теперь этовыглядит нормально, спасибо >>1785000 Данные из SQLite в массив грузятся,но это происходит быстро, там проблема именно с отрисовкой RecyclerView была, но тот человек уже скинул инфу, так что в принципе всё в порядке уже
Сколько уйдет времени на изучение ведра, чтобы можно было пойти устраиваться ждуном при условии, что имеются базовые университетские знания (кресты, высшая математика, алгоритмы и все такое)?
> Сколько уйдет времени на изучение ведра, чтобы можно было пойти устраиваться ждуном при условии, что имеются базовые университетские знания (кресты, высшая математика, алгоритмы и все такое)?
На ведре кресты практически не используются - прикладуха на жяве и котлине, игорь - безальтернативные юнити и сисярп.
Есть разве что ниша в лице УЕ4 (10% от рынка геймдева, остальное - юнити), но там в связи с последними скандалами от эпик геймс похоже всё тухло.
>>1755587 Такое случается если делать всякие if и прочее дерьмо. Ресайклервью работает нормально только если он все данные получает со списка. Хотя там есть некоторые ухищрения, чтобы сделать например expandable вью холдер, чтоб его нажал и показало больше данные в нем, например. И для этого есть гайдлайн гугл, погугли. Они делают через setActive и прочую дичь.
Кароче, чтоб работало норм - никаких if и все данные обезательно переназначать в каждом вьюхолдере. Хотя бы if else, чтобы засетать как null или как-то так.
>>1778500 Писос, сначала пойми для чего все это нужно, понимание придет. Советую вообще забыть что такое асинктаски и лоадеры, корутины наше фсе, реактивщина - флоу, в пизду РхЖабу.
>>1789218 >в пизду РхЖабу Зря. Это наиболее близкая к идеальной реализация реактивного подхода, которая избавляет от костылей во многих случаях читай: имеет больше юзкейсов + способствует пониманию концепции как таковой. В настоящее время она выигрывает, а там как покажут релизы. надеюсь, что скоро
Сап. Околоджун на андроиде. Эмуляторы во время разработки нормально юзать или без настоящих девайсов не обойтись? Если говорить о профессиональной разработке
>>1791911 а есть профиты в переходе? кроме того, что модно молодежно разве корутины могут полностью заменить рх с их операторами (фильтрами, таймерами, мапами и проч проч)
>>1791942 Флоу может заменить большую часть функционала, но не весь, как я уже писал ранее. Ты получишь функционал, который проще внедрять, но не будешь уверен в том, будет ли он достаточен. такова текущая картина для средне-сложных проектов С rx таких проблем не возникнет. Профиты ты получишь только в том случае, если он на 100% покрывает твои задачи в контексте сложности и ты уверен в том, что не придется ломать ноги. Если нет, лучше использовать rx.
Приветствую Я уже разбираюсь в теории андроид разработки, знаю всякие полезные библиотеки современные по типу RecyclerView, Retrofit и тд. Теперь следующим этапом хочу начать уже собственно разрабатывать. Как и куда податься? Какие сайты фриланса лучше выбирать именно под тему андроид разработки? Может быть какие советы дадите еще. Буду крайне признателен.
В анроидах 8.0+ выпилили старый конструктор метода requestFocusAudio(...) (который принимал листнер, стримТайм и durationHint, ну вы поняли) и вместо него теперь в конструктор посылается всего один объект AudioFocusRequest. Я правильно понимаю, что если у меня minimum SDK стоит ниже 26, то по-хорошему для воспроизведения аудио в моей приложухе я должен реализовать сразу два метода: один для старых андроидов, другой для новых? И пометить каждый аннотацией, для новых или старых сдк оно создано? Или че вообще делать? Спс
Хуй знает куда писать, спрошу тут, только не стукайте. Есть рабочий apk, который как я понимаю работает с конкретными ссылками, грубо говоря берет с определенных 3rd party источников инфу и выдает тебе. Вопрос, можно ли каким-то образом сделать декомпайл? разобрать приложение и поменять ссылки на свои, из которых оно берет информацию и скомпилировать по новой имя только apk файл?
Привет двач. Я не особо ярый пользователь андроид студии, поэтому мб слегка даунский вопрос. Вообщем, есть файл (.pb). И есть либа (OpenCV), которая знает что с ним делать. Есть метод Net model = Dnn.readNetFromTensorflow(String modelFile); И там нужно выбрать каким-то неведомым мне образом в параметр путь к этому файлу. И у меня вопрос. Куда положить в проект этот файл, что бы он был в апкшнике, и как прописывать путь к нему?
йоу, не могу сделать обычный fetch запрос к публичному апи, он прост не выполняется в эмуляторе, ошибок никакхи нет, такое чувство будто android emulator блокирует все интернет запросы в main/AndroidManifest.xml есть <uses-permission android:name="android.permission.INTERNET" />
>>1797567 Дідько, ну почему в твою смышленую и светлую голову не прошло еще понимание того что описание проблемы равно пропорционально шансам что тебе кто нибудь да и поможет.
>>1791942 Есть и не мало, вот возьми и погугли. Практически весь функционал с рхЖавы существует, но неосиляторы и старые пердуны которые нихуя не хотят учить хрюкают что бы не напрягаться.
>>1794945 200-500 баксов в месяц от оче популярной проги 2к закачек в день. Игры не делаю. 200 баксов сча получаю, во время коронавируса. Мне кажется пенсионеры в Украине больше получают))0 Хорошо что живу в доме родаков и трачусь тока на еду немного.
Прланирую вкатиться в игры.
Все зависит от удачи и от необходимости продукта, внимания в деталям, красоты и тд. .. .. попробовать стоит, кароче.
Как называется подвид Master Detail Flow, при котором элемент списка, чтобы показать детали, просто расширяется, оставаясь на том же месте? Не могу нагуглить как это правильно делать Спс
Учу джавакор какое-то время на изичах. Месяца через 2 добью учебник. Думаю поучить дальше андроид. Вопросики: 1. С чего начать изучение на джаве? Тут раньше вроде кидали на какой-то сайт англоязычный. 2. Под новые андроиды тоже на джаве можно писать? Для начала учебы не хотелось бы вообще лезть в котлин. 3. Какая версия джавы нужна(разные сдк разные версии джавы ведь поддерживают)? Джавы 8 нигде нет без десахаризации? Думаю минапи - 23. 4. У меня сейчас древнее устройство на 6-ке. Думаю купить еще бюджетку на 10ке. Норм будет такие два устройства, чтобы смотреть, как работает?
>>1801044 >1) С туториалов >3) 6 - дефолт, 8 - подруб под новые фичи Можешь раскрыть немного поподробнее? Какие конкретно туториалы и ситуация с версиями джавы. По джаве месяца полтора убил на перебор учебников/видеокурсов/текстовых туториалов, чтобы мне хоть немного заходило.
>>1801148 >Какие конкретно туториалы Какие зайдут, тут уж пробуй. Можешь посмотреть курсы, либо прочесть книгу, можешь последовательно изучать доку и проходить гугловские туторы. советую читать medium Любой из этих вариантов может дать тебе хороший результат. >ситуация с версиями джавы Не вижу смысла расписывать особенности версий, об этом много инфы. Ставь минапи 21 и пиши код - по ходу дела столкнешься с необходимостью добавить 1.8, чтобы реализовать те или иные фичи. к примеру, это необходимо фреймворкам с кодогенерацией с помощью аннотаций Вообще, читай инфу по мере возникновения вопросов в написании кода, иначе ничего толкового не выйдет, если застрянешь на теории. я не знаю твой уровень владения программированием как таковым, поэтому даю новичковый совет
>>1801286 Всегда юзаю файнбайайди. Новомодный вьюбайдинг не юзал ещё. Погуглил, что-то слишком сложно и заебисто. Буду юзать православный файд бай айди.
Кстати, как я понимаю findViewById(R.id.x) будет искать x прежде всего в лайаоте текущей активити, но если не найдет, то пойдет искать вообще во всех лайотах пакета. И иногда он так находит что-то совершенно из другого места С viewBinding же сразу видишь, из какого лайота идет айдишник
>>1801722 > findViewById(R.id.x) будет искать x прежде всего в лайаоте текущей активити, но если не найдет, то пойдет искать вообще во всех лайотах пакета
>>1750676 (OP) Как узнавать точные названия зависимостей для градла? Например, мне нужно заимпортить CardView, а анроидстудио автоимпорта не предлагает (особенно если работаешь в .xml)
>>1802279 Ну вот я беру андроид студио последнюю. создаю там проект выбираю меню навдрейер и все - больше ничего не делают запускаю его в эмуляторе - а меню не работает запускаю на планшете - а меню не работает
блять, хотел узнать как быстро вкатиться в андроид разработку на котлине, если уже хорошо шаришь в программировании, а у вас даже нормальной шапки нет, ну нахуй
Поясните за синглактивити приложения там же 1 активити и куча фрагментов вопросы: 1 а как вьюмодели соотносятся к фрагментам? не делать же одну вьюмодель 2 а если мне внутри фрагмента нужны еще фрагменты допустм переключать как в основной активити основные фрагменты то тут как делается?
>>1803041 1. во-первых ты путаешь понятия: вьюха и модель - разные вещи. модель вообще по-хорошему одна должна быть, которая полностью соответствует табличке в БД, но одной модели может соответствовать несколько бизнес-сущностей 2. слушай ну тут либо if + else, либо switch case, либо EventHandler (ну делегаты там и прочие штуки, по другому никак)
>>1803057 1 это ты что то напутал. я говорью про ВЬЮмодели, те которые ViewModel. https://developer.android.com/topic/libraries/architecture/viewmodel и их еще используют как средства шаринга данных между фрагментами и создаю я их в активити модели и база данных вообще из другой области 2 Я не про это. есть 1 активити и там навигатионхост который и переключает фрагменты вот боковое меню и контент тому пример. Но если мне точно так же нужно сделать чтобы уже фрагмент выступал как хост для подобного же переклчения
>>1803041 1) У каждого фрагмента должна быть собственная вьюмодель, которая реализует только те юзкейсы, за взаимодействие с которыми он отвечает. Это нужно, это правильно, это создаёт позитивные ограничения. 2) Никакого фрагмента внутри фрагмента быть не может. У тебя есть активити, которая является "энтри поинтом" и контейнером для фрагментов, которые друг друга заменяют, либо накладываются друг на друга(зависит от заданного поведения). Она может содержать логику управления общими UI-компонентами например, прогрессбаром или меню и фрагментами их жц и ограничениями, которые необходимы при работе с навхостом, всевозможные коллбэки или сессионные данные, которые необходимы для правильного поведения фрагментовбандл с маркером для навигации, например. >>1803059 >и создаю я их в активити Вот этого не понял. ViewModel должна быть отдельным классом/файлом >Но если мне точно так же нужно сделать чтобы уже фрагмент выступал как хост Навхост нужен для того, чтобы создать чёткую последовательность действий, которую пользователь не сможет нарушить и зайти "не туда". "Переключать" должна активити - navController должна видеть только она, но ты можешь вызывать её методы через интерфейс, методы которого она реализует.
>>1803195 2) ну вот стандартное навигатион дрейер приложение пустое. там одна активити с навхостом и несколько фрагментов страниц ну вот мы открываем страницу - и внутри же нам нужно мудрить содержимое. А это фрагменты. В обычном приложении у нас есть активити и в нем мы юзаем фрагменты. А мы уже во фрагменте (который в навхосте)
1) кто создает вьюмодель для фрагмента? сам фрагмент? >и создаю я их в активити примеры в инете создают вьюмодели в активити и даже если лезут к ним в фрагменте, то снова pageViewModel = ViewModelProviders.of(requireActivity()).get(PageViewModel.class);
3) и что будет если я захочу сделать подобие навхоста на уровень ниже то есть мы имеем основную активити и навхост. навхост уводит нас во фрагмент страницы а внутри страницы у нас слева список, который справа сменяет контент. Причем по тому же принципу что и навхост. Навхост больше неьлзя да? руками пилить обработчики переходов? есть же какой то "Move to Nested Graph > New Graph". это что?
>>1803253 Всё нормально. Проблемы могут возникнуть в исключительных случаях, но такого рода ошибки очевидны и быстро фиксятся. Смысл юзать? Фрагменты гибче, активити становится своеобразным контроллером, куда можно вынести общую логику. Наибольшее удобство заключается в разделении presentation слоя на отдельные модули, архитектура выглядит стройнее. >>1803254 >В обычном приложении у нас есть активити и в нем мы юзаем фрагменты. А мы уже во фрагменте (который в навхосте) Вот во фрагменте мы и пишем код. Представь, что каждый фрагмент - отдельная активити, которую ты запускаешь из одного класса, в котором содержится метод startActivity для каждой из них. >кто создает вьюмодель для фрагмента? сам фрагмент? Ты создаешь ViewModel для фрагмента, а затем получаешь реф во фрагменте. Тут нечего выдумывать. >то есть мы имеем основную активити и навхост. навхост уводит нас во фрагмент страницы а внутри страницы у нас слева список, который справа сменяет контент. Причем по тому же принципу что и навхост. Проще всего задать правила, при которых список будет изменять поведение согласно состоянию и использовать отдельный граф.внутри того же навхоста, где может быть много графов, ведь он содержит инфу обо всей навигации, которая у тебя имеется
>>1802036 взял 2 заказа у стремного филлипинца, декомпилял и хакал какое-то местное приложение для такси. Худший экпириентс, но 2 отзыва в карму Получил 3й фикс заказ за 200 бачей ради отзыва у какого еврея. Перелопатил тонны говнокогда, постоянно делал правки, как он меня заебал, доделай еще то, и это. Чуть его уже нахуй не послал, но он раздобрился, и написал отзыв (на 4 вроде, пидор) Потом мне повезло и схватил норм контракт на 20$ в час (тоже говнокод индусский, но мне заебись было), сидел несколько лет на нем. это было пиздец давно, потом все фриланс площадки скурвились
Блин я полный нуб в Андроиде, у меня приложение на РН. Когда билдаю аппку получаю Failed to transform lifecycle-common-java8-2.2.0.jar Default interface methods are only supported starting with Android N (--min-api 24): void androidx.lifecycle.DefaultLifecycleObserver.onCreate Мне надо что бы Sdk осталось каким есть, меньше 21, это реально вообще сделать?
>>1803300 >Ты создаешь ViewModel для фрагмента, а затем получаешь реф во фрагменте. Тут нечего выдумывать. где создаю? не в активити же. Слово реф намекает что вьюмодель создана уровнем выше. А уровнем выше активити. И если она одна на все приложение то получаем вечноживущую активити, что неправильно.
>что каждый фрагмент - отдельная активити если воспринимать фрагмент как активити в которой еще будут фрагменты, то тогда все нормально - если это правильный подход конечно (что я и выясняю)
>>1803501 >где создаю? Создаешь класс NameViewModel, который экстендит ViewModel. Инжектишь его, а затем получаешь ссылку внутри фрагмента через nameViewModel by viewModels(), например. Это отдельный класс, который ты связываешь с фрагментом. >Слово реф намекает что вьюмодель создана уровнем выше Уровнем ниже, т.к. vm: 1) ничего не знает о фрагменте(и не имеет доступа к контексту, что является best practice), 2) реализует юзкейсы. >если воспринимать фрагмент как активити в которой еще будут фрагменты Есть видос с докладом о фрагментах на официальной конференциина канале AndroidDevelopers, попробуй посмотреть его.
>>1803880 Та хз, так получилось. Изначально думал в жову штырьпрайз идти. Но как-то довелось попробовать писать под Ондроед - оказалось, ничего так. Так и пошло-поехало.
>>1802279 > минусы разработки под Android разработка под Android))))))))))))))))))))) ололо > рынком Ну, судя по рынку вакансий ин Юкрэйн, неплохо, весьма неплохо. Да, и сорока напела, что хорошо все с проектами сейчас. > React Native или сайты адаптивные Нээээ, ты шо. Не убивают. Пока это остается нишей несмотря на то, что большинство приложений смузятина ебаная это, по сути, тонкие клиенты. Кстати, за все эти реакт нэйтив слышал не очень лестные отзывы, на самом деле - поговаривают, раз на раз да глюк херовый вылезет.
В приложухе есть 5 длинных статей и требуется добавить возможность прослушать их Ясно, что озвучивать никто ниче не собирается и придется юзать бота Преобразование текста в речь лучше сделать в рантайме или просто тупо сэкономить ресы проца и залить заранее готовые raw для каждой статьи? спс
>>1803880 Изначально выбор был ограничен тем что мне предложил братишка и тем, что был только Windows ПК. На этом этапе знания про iOS разработку были на уровне пары статей из интернета. Затем пока готовился к вкату, работая на другой работе накопил на Macbook Air 2015 и даже тогда не посмотрел в сторону iOS разработки. А потом когда устроился на первую работу Android-разрабом, то там вообще как-то не до изучения новой платформы было. Зарплаты там и правда выше по сравнению Android, потому что специалистов гораздо меньше на рынке труда, а толковых тем более.
>>1804081 Хранить локально все эти статьи не очень хорошо, потому-что твое приложение будет весить необоснованно дохуя. Сейчас есть технологии которые могут тебе позволить все сделать в рантайме.
Сап Есть спиннер на вьюхе, значение для которого пользователь обязан выбрать. Если ниче не выбрано - вывести предупреждение Я правильно понимаю, что предупреждение нужно выводить с помощью каллбэка спиннера OnNothingSelected? Спс
Вопрос оче легкий, прошу помочь, прям оче важно Короче, есть активити. Она запускает новую активити по прошествии некоторого времени, при этом новая активити должна получить некоторые данные с нашей первой активити Как лучше передать эти данные? 1. Через putExtra или 2. Сделать поля с данными первой активити статическими и считать их содержимое уже в новой активити Плз. Спасибо!
>>1804768 Можно в intent которым ты открываешь вторую активити из первой, положить нужные данные в Bundle, во втором активити эти данные получить. Либо sharedViewModel, но если данные какие-нибудь примитивы, тогда проще первый вариант использовать. Еще можно создать singleton репозиторий и к нему обращаться из любого места в приложении, но боюсь не осилишь этот вариант.
>>1804658 Никаких статических полей, только бандл. >>1804773 >singleton репозиторий и к нему обращаться из любого места в приложении Если тебе нужен репозиторий, чтобы передать данные из одной активити в другую, значит ты уже сделал что-то не так. перемудрил >>1804817 >как бы сделал сеньор? Делал бы всё в одной активити юзал бы бандл
Здарова, мужики. Есть тут кто зарабатывает на андройд приложухах? Как вообще сейчас на этом рынке дела? Помню в 12 году анон платил по сотке баксов за одну только идею игры/приложения под андройд.
>>1805153 Нет. ViewModel не должна вообще чем-либо управлять, тем более UI, она может только провайдить что-то. Ты можешь создать LiveData и засовывать туда что-либо, а затем изменять состояние внутри активити/фрагмента, исходя из тех данных, которые туда приходят, либо их наличия как такового, но все методы, которые влияют на состояние, либо объекты, которые содержат в себе информацию о нём, должны быть созданы в a/f.
>>1805659 Тогда какой толк от ViewModel, если там нельзя разместить всю логику? Где её тогда размещать и как тестировать? Мне нужно отобразить 3 снекбара и 1 диалог, в зависимости от настроек системы.
>>1805854 >Тогда какой толк от ViewModel, если там нельзя разместить всю логику? Уже отвечал, что там можно размещать только данные, в т.ч. и о состоянии. Почитай о шаблонах и компонентах >где размещать В активити >как тестировать Отдельно тестировать UI и VM >Мне нужно отобразить 3 снекбара и 1 диалог, в зависимости от настроек системы В singleactivity это пишется в активити. VM может хранить данные о состоянии, т.к. находится в presentation слое, но не может содержать логику управления.
>>1750676 (OP) Привет, анонимы. Есть вопрос. Знает ли тут кто-нибудь как сильно ебёт модерация Гугла при опубликовании приложения в Google Play? Проверяют ли они по какой лицензии распространяются картинки, используемые в приложении или в каком стиле оформлен дизайн приложения? Можете обрисовать подводные камни при публикации, если не сложно? Был бы очень признателен :3
>>1806011 Создают же рядом layout файлы и потом include их в основной.
>>1805854 В Entities бизнес логика В UseCases логика приложения.
Но если экран маленький то и во вью модели офк делать можно.
>>1804817 не клал бы в бандл. Хотя, спорно. Но лучше не завязываться на такое говнецо. Ох вспоминанию эти бандлы при открытии новых окон в ведройде...
>>1803880 На начальном этапе. Потом одинаковы, как и у всех. Я накопил денег а потом в айос перебежал. Здесь лайтовей, приятней, без костылей. Без вот этих >>1795385 >В анроидах 8.0+ выпилили старый конструктор метода requestFocusAudio(...) >minimum SDK стоит ниже 26,
А если юзать Navigation Components, то там есть специальный аргумент для передачи данных с одного экрана на другой. Правда придется юзать всего одно активити на всю приложуху
>>1806139 >внутри View Внутри активити. активити - не вью Активити не должна быть слишком большой god object'ом с таким подходом, потому что ты создаешь и переиспользуешь все необходимые компоненты, которые тебе нужны(всевозможные бары и менюшки). Реализацию она содержит только в том случае, если её невозможно запилить в другом месте во фрагменте. Всю остальную юайную логику, которую ты можешь реализовать "на месте"во фрагменте, ты пилишь именно там. Любая реализация должна быть уместна, тогда не будет никаких проблем.
Раз шапки нет - вопрос. С чего, собственно начать? Писал что-то буквально 15-20 лет назад последний раз и то на ассемблере, паскале и т.п. так что нулевой в общем. Что читать, куда смотреть, за что хвататься? Цель довольно прозаична - нужны бывают приложения которых нет, простые довольно (калькулятор по техкартам, калькулятор растворов, расчет параметров продукта по температуре времени процесса и т.п.), мелочи, которые чуть ли не в бейсике можно реализовать в принципе, но нужно в телефоне и удобно, потому что для тупых. В перспективе, конечно, хотелось бы все калькуляторы вместе свести, техкарты сделать интерактивные и т.п. Но пока хотя бы азы.
>>1806737 Java, сайт StartAndroid - чтобы быстро начать делать хоть что-то(для твоих целей сойдет, судя по всему) Более серьезно - лучше найди шапку старых тредов
>>1806737 >>1806739 Двачую, можно вообще ограничиться Java, если хочется иногда пилить приложения для себя. Она даст тебе возможность "просто сделать то, что будет работать". Котлин больше для проданшна, так как экономит приличное количество времени.
>>1806147 >В Entities бизнес логика >В UseCases логика приложения. Такой воды полно везде. Говори конкретно. Clean architecture читал - вода водой, очевидные вещи. Единственное что полезно из этой дискуссии: - viewmodel только для сохранения состояния - вся логика текущего экрана внутри fragment/activity
Здравствуйте, хочу делать свои приложения для андройд пока на определенную тематику.
Погуглил, что для этого нужно, но не совсем понял, какие инструменты уже легаси и их не нужно смотреть и на что нужно смотреть как сегодняшние инструменты с перспективой.
Я так понел, сразу в Котлин вкатываться и пропустить яву?
>>1807203 >Я так понел, сразу в Котлин вкатываться и пропустить яву? да. жава выучится в ходе гугления "а как сделать это".
>и на что нужно смотреть как сегодняшние инструменты с перспективой. сразу aac (навигация, биндинг, вьюмодели, обсервабле бла бла) нет смысла изучать то что устарело туда же нафиг не нужны всякие убогие средства с многопотоком, когда есть корутины.
Ребята, есть ли в андройде ремоут? Можно ли с нуля джава мидлу вкатиться и получить работу в приземленные сроки, ибо в моей мухосрани андройдом даже не пахнет?
в андроиде вся та канитель с вьюхами, инфлатерами, адаптерами а в котлине они решили улучшить жаву, да переборщили с синтаксисом. Сложно распарсивать глазами и собирать суть.
меня в итоге выбесило и я ушел на хамарин с его каким никаким, но xaml
Если я юзаю viewBinding, нужно ли объявлять приватные поля с вьюхами для класса активити (private TextView mTextView и т.д.)? Или будет норм напрямую к вьюшкам обращаться через binding.myTextView? Спс
>>1750676 (OP) Сюп. Не знаю, туда ли зашел, но может сориентируете? Сколько примерно стоит разработка приложения по моему ТЗ? Приложение, допустим, нечто вроде простого агрегатора такси: карта города, на ней видны водилы/пассажиры, прикручена оплата. Описал просто примерно для оценки, на самом деле суть приложения будет другая. Профессиональная разработка не нужна, нужна просто заглушка в гугл-плэй для теста ниши, сойдет любой говнокод, лишь бы хоть как-то работал. Сколько за такое просить и где вообще искать разрабов?
красное подчеркивание исчезает и все работает. Но удаляю первый конвертер convertNullableLongToString и он не собирается "Cannot find a setter for \u003candroid.widget.TextView android:text\u003e that accepts parameter type \u0027androidx.lifecycle.MutableLiveData\u003cjava.lang.Long\u003e\u0027\n\nIf a binding adapter provides the setter"
да ну бред пит какой то. Как правильно то прописать?
>>1808371 80 тр, делал такое и заказчика тоже здесь нашел. Сроки 2 недели, дольше там нечем заниматься. При условии, что серверная часть готова. Не возьмусь, дел много.
опять приходится писать костыли для EditTextPreference, потому что android:inputType="number" или android:inputType="numberDecimal" бесполезны ибо вылезает полная клавиатура, а также сохраняется в преференсес строка, а не Int
Это я какую то доку не прочитал или все так и осталось как и было раньше через жопу?
Анон, имеющий богатой ебли с базами под андроидом, скажи, как тебе Android Room?
Я впервые разрабатываю приложение на андроид, где нужна база, и по старой бекендовской привычке решил что это должен быть СКУЭЛЬ и официально(с) рекомендуемая(с) ОРМ(или вроде того) от Гугла.
Однако я вдоволь наебался уже на данном этапе (имея порядка 15 таблиц) с сохранением связанных структур и ограничениями Room'а, который в целом смахивает не на ОРМ, а на тонкую прослойку-помощник.
Вопрос простой - есть ли у анона действительно приятный ОПЫТ работы с какими-либо еще ОРМ-ками? Возможно, более БОГАТЫМИ в плане функционала. Возможно не SQL, хоть и не желательно.
>>1812799 Сначала чекаешь возможность записи. Если её нет - просишь разрешение. Затем чекаешь наличие sd-карты(secondary external storage), иначе пишешь в primary. fun checkSecondExternal() = getExternalStorageState() == MEDIA_MOUNTED && isExternalStorageRemovable()импорт из android.os.Environment, но можно делать такое и через контекст Флаг MEDIA_MOUNTED - смонтрован ли external, isRemovable - является ли он sd-картой. Далее получаешь путь и используешь.
>>1812900 >Room Если нужно сделать что-то простое или на скорую руку, то норм. Для чего-то более сложного выберу скорее SqLiteгибче, но, опять же, зависит от задачи. >Room'a, который в целом смахивает не на ОРМ, а на тонкую прослойку-помощник Так и есть, это сахарный слой. Гугл рекомендует юзать именно Рум, дабы была возможность ловить ошибки, а не щёлкать клювом, когда у тебя что-то ломается. Есть ещё Realm, он вполне себе хорош, ничего плохого не скажу. не помню, на самом деле, но проблем с ним точно никогда не было
>>1812900 Все ОРМ говно по определению, потому-что: 1) Ограничивают тебя в написании SQL(тьюринг полного языка, между прочим). 2) Код превращается в кашу из аннотаций с SQL'ем внутри них, когда у тебя более-менее сложная модель и кастомные SQL запросы
Андроны, мне нужно сделать фоновую загрузку файлов с Ftp, пока я просто хуйнул активити и еще создал класс где в asyncTask веду загрузку. Подскажите это норм тема? Или надо как-то там через некие механизмы андроида вроде сервисов все это организовывать?
Но ведь room не запрещает разработчику использовать SQL напрямую?
>была возможность ловить ошибки
То верно, это очень годно, но цена тому весьма раздутый слой логики работы с бд, он чуть меньше, чем если бы писать везде сырой sql, но намного больше, чем на бекенде с полноценными ORMками и прочими activerecord'ами.
>>1813014 1-2 - все так, да. Посмотрю SQLDelight, спасибо
>>1813109 >Но ведь room не запрещает разработчику использовать SQL напрямую? Да, но смысл в том, что я бы не стал тащить Room в проект, где уже используется SqLite.
>>1812900 >а на тонкую прослойку-помощник. А оно это и есть. Схему создает, миграции может, CUВ простой и R маппинг на POKO объекты. Необходимый минимум без оверхедов. Самое оно для андроида
>>1813498 Использую их для фоновых задач, но почему они прекращают работу после закрытия приложения (свайпом из недавних)? Я уже что только не пробовал (BroadcastReceiver, Service, Worker, и.т.д), из всего работу не прекращает только Foreground Service, но уведомление висит ненужное. Ебал я эту политику энергосбережения Подозреваю сейчас Xamarin в этом, может, следовало на жабе писать
>>1813866 >Подозреваю сейчас Xamarin А он тут причем? Это политика андроида, начиная с oreo Если нужно работать постоянно, то юзать нужно Foreground Service с иконкой Как хак можно собрать под более раннюю версию SDK - тогда андрюша будет считать что приложуха не знает про новые правила анальных ограничений и не ограничивать их, имхо. (в моем случае это помогло, а так то я нихера не знаю)
>>1814991 Ну, вообще, потому что так модно. Серьезно. В принципе, пользователь не узнает что там "под капотом". Да ему и пофиг что там. Но дань моде - это дань моде, ей нужно следовать безпрекословно. Чтобы было все прогрессивно, cutting edge, так сказать.
Это как есть отсталые реднеки прошлого века со своей маскулинностью и вот этим своим "КАКМУЖЫК", а есть современные толерантные прогрессивные молодые люди, которые поддерживают идеи феминизма, BLM, экологической борьбы и так далее. Это, в принципе, одна из главных определяющих характеристик не только отрасли мобильной разработки, но и человека в принципе.
>>1815119 >Чем же? мы щас о чем говорим? я про конкретную реализацию даггер2 А так DI понятно зачем нужен. это ж DI.
>Ну, вообще, потому что так модно. Серьезно. В принципе, пользователь не узнает что там "под капотом". Да ему и пофиг что там. Но дань моде - это дань моде, ей нужно следовать безпрекословно. Чтобы было все прогрессивно, cutting edge, так сказать. гуморыст
>>1815143 Если ты пишешь "зеркало" или просто размазываешь код в одной активити, то да - можно вообще не запариваться. Если же ты пилишь что-то более сложное и имеющее намёк на структуру, di сэкономит время. надеюсь, что телега про определяющие характеристики - рофл, потому что это действительно забавно >>1815171 >мы щас о чем говорим? Об этом: >он на андроиде кошмарен Почему он кошмарен? Окей, что именно тебя не устраивает в реализации даггера? di-утилиток много, так-то. Не можешь в даггер - бери то, что попроще, либо просто больше нравится
>>1815457 А что тебе от приложения надо-то? Уже несколько лет даже нейронки и обработку фото/видео гоняют полностью на клиенте, мощностей для такого хватают.
>Где б почитать про плюсы минусы? Плюсы и минусы для какого приложения? Тут вопрос вообще-то к тебе — нужен ли сервер для работы твоего приложения (оно клиент-серверное, нужна синхронизация, пользователи должны авторизоваться в твоём сервисе, тебе надо рассылать пуши/прочий спам и тд). А даже если нужен, то можешь взять какой нибудь BaaS типо Firebase и шлёпнуть на нём за пару дней весь функционал.
А если не нужен — из плюсов: работа оффлайн, прайваси. Из минусов: твой рокетсаенс будет жрать батарейку и греть телефон как тварь, конкретно на андроиде куча девайсов за 5000р, пользователи которых будут отгружать тебе в стор тонны говна в виде комментов "нихуя ни работаит разраб кривой аптимизируй сука(9".
Сап. Вкатываюсь в анроид с июля, прошел курс на Udacity Android Basics. Курс понравился, но следующий (Android Developer) уже устаревший, не юзает Jetpack. Попутно написал пару своих простых приложений.
Теперь я изучаю официальные гайды от гугла. Планирую пройти все эти 20 секций на пикриле к январю, за эти две недели изучил все по Activity - каждая страница была мною прочитана раз по 5 + воспроизводил на память все самплы кода, которые они там приводят. Конечно, там дофига инфы и я уже что-то забыл, но процентов 70-80 в памяти осталось.
Как вам такая стратегия изучения? К середине зимы хочу писать код, юзая все компоненты джетпака, что-то вроде такого: https://github.com/android/sunflower
>>1815883 Так я пишу небольшие приложухи + все их самплы. Вижу, например, что они советуют оверрайдить onBackPressed только в случае создания confirm quit диалога, и при этом все равно вызывать родительскую имплементацию внутри, - пишу пустую приложуху с этим confirm quit.
Типа к зиме-весне теоретических знаний у меня будет как у милда, опыта - как у джуна++, я думаю (надеюсь), с этим можно на удаленку или даже фриланс идти. + хорошие знания в material design, я типа дизайнер вообще
>>1815904 Ну хз, я в начале сентября как раз сел писать большое приложение - и это пиздос, просто постоянный гуглеж + слабое понимание того, что нагуглить все-таки получилось. Тот же гугловский гайд Navigation components ты слабо поймешь, не прочитав их Activity и Architecture components, а ведь это основа ИМХО будет быстрее поступательно двигаться, 100 мелких-мелких приложух, а потом уже писать большие
Но я слышал стори, что не каждый джун способен внятно рассказать, что такое активити, например. И их все равно на работу берут. Это правда? Мб я тогда рили оверкиллингом занимаюсь, хз
>>1815930 Экран, занимающийся отрисовкой UI. Более общно, это основной компонент любой приложухи; активити работают сообща внутри приложения, но при этом слабо связаны между собой. Использование приложений на десктопах и мобилках отличается тем, что на мобилках юзеру часто нужен конкретный функционал в приложении, а не его стартовый экран и т.п. - и ввиду того, что активити слабо связаны между собой, из приложения А мы без особых проблем можем запустить нужное нам активити приложения Б. Активити может находиться в состояниях Resumed (foreground), Paused (потеряло фокус, может быть частично видно или полупрозрачно), Stopped (не видно совсем), причем реализовывать поведение компонентов, зависящих от текущего стейта жизненного цикла, лучше с использованием API LifecycleObserver, а не в callback-методах onCreate, onStart, onResume, onPause, onStop, onDestroy. С помощью lifecycle-aware компонентов мы должны сохранять стейт, очищать инициализированные ресурсы (но но увлекаться этим в ходе Stopped стейта, потому что он очень короткий), переходить к меньшему потреблению мощностей (например, не так часто обновлять местоположение пользователя).
Если нужны ресурсы, то система никогда не разрушает напрямую активити, а только процесс, хостящий активити, причем стейт процесса соответствует жизненному стейту активити, в порядке убывания важности: Resumed, Paused, Stopped. При этом даже после того, как система вызвала onDestroy, она сохраняет визуальный стейт активити в Bundle instanceState; реуомендуется не держать в визуале больше 50KB инфы. Можно положить в этот бандл и другие свои данные с помощью onSaveInstance, но не рекомендуется увлекаться, чтобы избежать лишних затрат на сериализацию и десериализацию. Если данных много, то их нужно хранить с помощью ViewModel. Сам ViewModel мы должны очищать только в случае, если юзер эксплицитно клозает активити (нажимая на Back Button, например), мы не должны трогать вьюмодель, если чел просто перешел в multiwindow режим или перевернул девайс - определить че происходит можно с помощью isFinishing(), если все-таки экспилицтное завершение, то очистить вьюмодель с помощью onCleared(). Вьюмодель никогда не должна юзать Context, никогда не должна генерировать данные (только запрашивать).
Вместе активити составляют Task - задачу по реюзабилити различных активити (не обязательно одного приложения) в целях пользователя. На уровне абстракции Task, активити хранятся в back stack и не могут перемещаться внутри него - только удаляться или добавляться (last in, first out). Начало любого таска происходит в app launcher'е
Не принимал во внимание, что в приложухе должна быть скорее одна активити, суть ясна.
>>1816042 можешь ты знать как угодно но вот такое вывалить - и будет казаться что джун по верхам почитал там по бырому и воду наливает. Вроде инфы много, а кажется что знания пытаешься водой залить
>>1816017 >Вьюмодель никогда не должна юзать Context, никогда не должна генерировать данные (только запрашивать). Молодец, я об этом постоянно говорю карликам, а они всё равно продолжают спрашивать о том, как закостылить контекстно-зависимую фичу внутри vm. >Не принимал во внимание, что в приложухе должна быть скорее одна активити, суть ясна. Изучай фрагменты в контексте single activity и сопряженных с подходом ограничений и требований которые, в свою очередь, непосредственным образом связаны с архитектурой. Это в набольшей степени актуально и очень качественно тебя забустит. >Норм если такое на собесе выдам? За милда сойду? Как тебе сказать. Кто-то оценит, кого-то это не заинтересует, тут уж зависит от предпочтения собеседующего и того, на чем строится его механизм оценивания. Говоря о собеседовании, первостепенная задача - показать, что твои знания покрывают весь цикл разработки и структурированы в достаточной мере, чтобы иметь четкое представление о каждом этапе построения приложения как системы. Сюда же относится знание используемых технологий, подходов и принципов, которые направлены на построение максимально эффективного рабочего процесса. Важна не столько "площадь покрытия" теории, сколько способность работать в контексте недетерминированности алгоритма построения многокомпонентной системы, включая возможность качественно анализировать и соотносить достоинства и недостатки потенциального способа решения задачи, а ещё сроки, возможности и другие плюшки. Но если говорить проще, ты должен показать, что уровень твоей квалификации достаточен для того, чтобы самостоятельно принимать те или иные решения. это особенно актуально для удаленки Фриланс же отличается тем, что тебя оценивает только твой клиент, поэтому и требования несколько иные, так как ты имеешь возможность адаптировать рабочий процесс под себя, игнорируя чужие требованиялида/команды, формалистского подхода как такового, хотя сделать это не так просто, как может показаться, имея дело с заказчиком, которому просто нужен готовый продукт.
>>1816131 >как закостылить контекстно-зависимую фичу внутри vm. Вопрос как вопрос. ну не должна вьюмодель знать про контекст. Она должна знать тех, кто имеет право знать про контекст. И это не костыли, а норма как бэ
Сап. В сторону каких марок смартфонов недорогих лучше глянуть со свежей системой? Нужно для тестирования относительно легковесных приложений. Думаю, что одним эмулятором обойтись не получится, а сам пользуюсь яблоком. Глянул цены на сяоми, охуел. Думал, что раза в два дешевле.
Чет давно не заходил в тред, потому что додик оп бесил. Щапку проебали, молодцы, она была гавно все равно. Вкатывальщиков в этом треде дохуя, поэтому освящаю тред
>>1750676 (OP) Всем привет Бля, шапка проебана, а я как раз вкатывальщик Нужно для своих нужд написать андроид-приложение, по функционалу похожее на навороченную записную книжку, которая в себя будет аккуратно упаковывать данные, ну и проводить с данными всякие там действия, нужные мне. Потенциально было бы здорово синхронизировать данные с Гугл аккаунтом, но это уже потом, сильно потом Остановимся на записной книжке Но я вообще хз, на чем писать это самое приложение Есть какой-то признанный хотя бы парой анонов туториал степ-бай-степ гайд? Ну, какие-то основы, базовые вещи для приложения, чтобы познакомиться с языком / языками / спецификой? Короче, авторитеты, посоветуйте, с чего начать ньюфагу? В программировании е
Объясните глупому новичку: программы на Android следует писать с помощью Java или можно работать с JavaScript? Игры например? Или приложения? Или под Андроид можно писать на многих языках, как сообщил анон выше? А на Питоне можно работать?
>>1818991 жава просто нативный (ну теперь и котлин) так что если знаешь жава или котлин то на нем и пиши если дарт то flutter если шарп то хамарин если питон то kivy если жс то там свой набор говна
>>1819037 Точно. Ладно, крайний вопрос: если я буду создавать игру с открытым миром на Андроиде, Python Kiwi позволит мне реализовать это максимально хорошо? Или лучше юзать Java и Kothlin?
>>1818897 >>1818998 Такой вопрос: а kivy норм? Я просто имею некий (именно некий) бэкграунд в питоне, так что на бумаге киви будет вполне себе хорошим выходом, тем более, что мне не нужно пилить какое-то хитровыебанное шустроработаюшщщее приложение
Но kivy (судя по видосам) показался мне каким-то суперхитровыебанным, то ли приложение упаковывалось хуй пойми как, то ли что-то ещё, короче, что-то меня смутило. Так kivy норм?
И если не kivy, что из этого попроще? >жава просто нативный (ну теперь и котлин) >так что если знаешь жава или котлин то на нем и пиши Это проще, с учетом того, что я язык не знаю? Хотя и питон я не знаю, так, костыли умею хуячить...
>>1819127 Бери Джаву или Котлин что понятнее, ищи тутор по созданию записной книжки, затем пытайся запилить все те фичи, которые тебе нужны, имея какую-то основу. Думаю, это самый простой вариант. да и задача простая На Kivy ты далеко не уедешь, имея "некий" бэкграунд, так что лучше не трать время.
Наверное платина. Пытаюсь вкатиться, поясните как в андроид студио нормально сделать билд для SDK < 30. Скачал сдк 19, поменял в пикрил, билдится с ошибками всё.
>>1819138 Так есть варианты успеха для написания приложения уровня записной книги на питоне, или лучше (как советует анон ниже) взять что-то javakotlin? >>1819140 А все непонятно Тут мы возвращаемся к тому, за чем я пришел в тред А есть какой-то окологодный тутор, который можно использовать как отправную точку? Мало ли есть что-то, что признано аксакалами треда. Что-то, что даст большее понимание, чем какой-то видос уровня "на котлин за 30 минут без знания языка!"
>>1819182 чем нативнее язык тем удобнее средства разработки и возможности и гугление и с выходом котлин и aac стало более менее приятно кодить на андроид (до этого был лютый ад для мазохистов)
сам я шарпист, но предпочитаю котлин, а не хамарин просто потому что намного меньше костылить нужно
Здарова Пытаюсь отправлять данные из одного фрагмента в другой без использования viewmodel с использованием fragment manager. По необъяснимой причине не получается проставить листнер в принимающий данные фрагмент
по гайдам гугла, чтобы засеттить такой лиснер, нужно вызвать getParentFragmentManager().setOnFragmentResultListener( ... ), но, бля, оно не вызывается! тупо у фрагмента даже нет метода getParentFragmentManager()
пробовал через getParentFragment().getFragmentManager(), но у этой хуйни все равно нет сеттера setOnFragmentResultListener( ... )
Есть ли более-менее достойные аналоги ARCore со схожим функционалом (например, motion tracking, plane detection и всё такое), но чтоб работало всё это на большинстве устройств (хотя бы с 5-ым ведром), а не на 3,5 топовых флагманах?
>>1819904 >Простой sqllite должен выпиливаться Ты либо юзаешь sqlite, либо полностью его выпиливаешь и переходишь на room. Иначе тебе придется разгребать ещё больше.
Ребят, есть ли разница между 1) прописанным ключом и кредами в build.gradle и нажатием Build APK(s) на релизном варианте и 2) нажатием Generate signed APK. Вроде и там, и там всё подписано, но я вижу, что файлы различаются по весу. Маркету пофигу, а вот одна MDM ругается, что в первом варианте приложение не подписано.
Бляяяяяяять Я нихуя не понимаю, что не так с моим кодом пикрил Вызываю интенты, но они НИХУЯ не запускают соответствующие активити, вызывается только диалог "Share", содержащий вообще какие-то левые хуйни mindsk 30, на эмуляторе стоит API 30 Спс за помощь
Я тоже не понимаю, что может нравится в банальном формошллёпстве под андроид. Не Энтерпрайза, не бизнес логики, ничего. Какой то джаваскрипт под телефон. Взял данные с апи и отобразил, скукота для школьников. Вот и спрашиваю, как может нравится писать под андроид, посколько не особо понимаю, что в этом может нравится
БЛЯЯЯЯ интенты это самое уебищное что есть в андроиде вот почему нахуй сука интент пикрил без проверки запускается, а с ней - хуй там? КАК ТАК БЛЯТЬ ПОЧЕМУ СУКА RESOLVEACTIVITY ВОЗВРАЩАЕТ НОЛЬ КОГДА СУКА У НАС ЕСТЬ ЕСТЬ НАХУЙ АКТИВИТИ ДЛЯ ОБРАБОТКИ АКШНА КАК БЛЯТЬ КАК НАХУЙ ТАКОЕ ВОЗМОЖНО
проверка через packageManager.queryIntentActivities(...) тоже дает ноль (пустой список) ну как ебана
Поясните за RecyclerView (GridLayoutManager) с картинками из инета. RecyclerView знает ширину себя и количество колонок. но он не может же знать конечную высоту картинки. И если используя scaleType и adjustViewBounds картинка впишется не теряя соотношение сторон, то высота строки будет куда больше.
я не нашел способа задать ему начальные ширину высоту от которой бы он вел отсчет при скалинге.
Я решил тем, что вычисляю высоту строки при создании холдера, но блин это ж не дело.
Аноны, привет! Я бэкенд-макака. Умею в пхп и нодеjs. В данный момент возникла необходимость сделать несложное мобильное приложение, человеку будет выводиться карточка с информацией. В мобильной разработке я нолевой ноль. Масштаб времени - месяца три. На какой стул мне сесть? Флаттер? Или реактНатив на обычном реакте могу немношко писать? И вообще возможно за три месяца изучения по паре часов в день что то адекватное запилить? Или больше ремени уйдет?
>>1815914 >Но я слышал стори, что не каждый джун способен внятно рассказать, что такое активити
Ты бы видел меня как я начал маня-маневры делать 3 года назад на собесе при подобном вопросе и очень удачно сменил тему. В итоге устроился на галеру с первого же собеса, оче повезло что интервьеру понравился нет не пидор , суть заключается не в том знаешь или не знаешь , а как ты это подаешь.
>>если правильно понял твою цель, то за 2 недели на изи состряпаешь. Думаю правильно, на сервере есть данные, человек на приложение через api сервера должен получать json с данными. Сервер на пхп делают? Или сразу лучше nodejs? >>Если твоя цель только одна мелкая приложуха то быстрей, намного быстрей. Спасибо обнадежил. Значит буду изучать флаттер.
>>1805934 >каком стиле оформлен дизайн приложения Проверяют >Проверяют ли они по какой лицензии распространяются картинки Если владелец картинки пожалуется на тебя, то тебе пиздец. Минимум попросят удалить картинку из приложения, максимум забанят аккаунт. Если владелец кабанчик, может и в суд подать, но это из разряда раз на миллион.
>>1822085 >Сервер на пхп делают? Или сразу лучше nodejs? firebase потести. А так ноду если знаешь, не критично от слова вообще. >Спасибо обнадежил. Значит буду изучать флаттер. А так ты незнаешь его, попробуй лучше java core и котлин потом.
>> А так ноду если знаешь Значит пилить на ноде. Я понял.
>>попробуй лучше java core и котлин потом. А ты тот анон что мне ранее ответил? Просто моя задача с горизонтом месяца в три запилить на иос и андроиде оч простое приложение. Фактически просто вывести json от сервера. Небольшое такое дополнение к основному вэб-приложению. И мне нужно что то типа "http-режима", постоянный сокет я хз как мобильный клиент обменивается данными с сервером, онлайн игры очевидно на сокетах висят мне по идее не нужен.
В общем мне нужно что то попроще и побыстрее условно конечно В джаву/котлин я боюсь въезжать буду долго.
Про флаттер я писал, думал ты его знаешь. Нет смысла ебать мозги с флаттером если твоя цель приложение, джава кор и котлин легче зайдут + туториалов море.
>В джаву/котлин я боюсь въезжать буду долго.
Думаю если с утчетом изучения языка, тогда в 3 месяца уложишься легче, если хуй не забивать и учить плотно в плане информации. Да и вообще если приложения простое, то много ума и кода, там не нужно, тем более можешь спиздить уже готовый код и переиначить под себя, поищи в телег слитые курсы по изготовлению приложений.
>>1822113 Я думал о джаве, тем более что современный пхп это считай ее форк в плане ооп.
Но мне еще потенциально айфон-приложение нужно. То есть кроссплатформа. Хотя теоретически изучать джаву/котлин надежнее наверно. Короче я пока в сомнениях.
А кстати, читал что для грядущей фуксии флаттер - пока что единственная возможность пилить приложения. А вдруг для фуксии отвалится поддержка котлина и джавы? Это я как совсем профан говою конечно
>>1822141 >А кстати, читал что для грядущей фуксии флаттер - пока что единственная возможность пилить приложения. А вдруг для фуксии отвалится поддержка котлина и джавы? Это я как совсем профан говою конечно
В первый раз слышу, но думаю что пиздеж, котлин точно не умрёт для андроида.
>>1822159 В любом случае ждать пока выйдет фуксия нет смысла. Твоё дело конечно, но я бы изучал java core + kotlin, да и в любом случае думаю что переходит будет плавный и перейти во флаттер не составит труда.
>>1822169 Ну с учетом моего текущего контекста проблемы, это не так актуально. Мне нужно простенькое приложение на ios и android сделать, и видимо буду вкатываться во дарт + флаттер. В принципе конечно больше импонирует вкат в более глубокие и нативные технологии, но моя задача требует компромиссов. Поэтому попробую оценить по сложность реализацию через изучения дарт + флаттер, и уже от этого буду плясать.
>>1822069 2д. Уже не пилю. Новых идей нет, да и запал пропал, словил депресняк. Сделал тупо и проще, почему-то выстрелело, сейчас в стагнации. Доходы падают каждый месяц.
Ананасы, джуна (меня) которого все уже почти полгода почему-то считают мидлом посадили впервые не вносить правки в готовый проект, а писать самому с 0, еще в одну морду. Немного сомневаюсь в выбранной схеме для ui cлоя:
Проект - простенький интернет магаз, в силу того как выглядит макет ui сейчас пишу эрзац-сингл активити (одна активити для всего связанного с авторизацией, вторая - основная часть приложухи)
Основная часть апки на всех экранах имеет боттом нав бар, для того чтоб не проебывать все что юзер нащелкал, при переходам по навбару - фрагменты я тупо скрываю/отображаю, т.е по сути у меня висит 6 фрагментов на одном id активити, из которых 1 отображается юзеру - а остальные тупо скрыты.
Если говорить чуть более конкретно - то это не просто фрагменты, а фрагменты держащие бэкстек других фрагментов (т.к каждая вкладка навбара это целая цепочка разных экранов + мелкие дополнительные примочки, сделал через абстрактный класс от которого все эти топ-лвл фрагменты наследуются).
Вопрос в том насколько такая концепция жизнеспособна? Не посыпеться ли все от высокого жора памяти? Мельком посмотрел другие приложухи с навбаром - похоже многие делают что-то похожее.
Пока работает все ок, кроме пары мелких моментов (например после восстановления активити, восстановленные фрагменты не восстанавливают значение своей видимости (насколько я понял потому что в стейте такого поля тупо нет, буду сохранять ручками)
>>1822365 >Вопрос в том насколько такая концепция жизнеспособна? Не посыпеться ли все от высокого жора памяти? Мельком посмотрел другие приложухи с навбаром - похоже многие делают что-то похожее.
Прогоняй тесты сразу же, смотри сколько памяти жрёт, все зависит от толстоты приложухи, судя по тому что ты описал ебануть не должно.
>>1822381 >Прогоняй тесты сразу же, смотри сколько памяти жрёт, все зависит от толстоты приложухи, судя по тому что ты описал ебануть не должно. Спасибо, идея неплохая, с профайлером посижу - посмотрю. У меня вообщем сходные мысли, приложуха простая, ничего сверхтяжелого нет - да и на практике OutOfMemory я видел только у коллеги на проекте, где в рантайме на превью с камеры мутная либа с гитхаба накладывала OpenGl фильтры (и то, крашило только на некродевайсах)
>>1822437 Не воспринимай это как бред или тупой совет, реально помог.
Записываешься в бассейн, ежедневно. Потом спорт зал, тоже ежедневно, исключаешь весь сёрфинг в интернете, спать ложишься в 9 вечера, просыпаешься в 5.
Исключаешь алкоголь и фастфуд, он офицально вызывает депру по исследованиям.
На ютюбе смотришь только видосики про отдых и угар, никаких новостей и прочей хуйни, максимально абстрагируйся от этого, за 20+ депра пройдет, но один хуй все персонально, мне помогло.
>>1822060 Ну смотри, ситуация такая: Если проект новый, то 99.9% это котлин. Если старый - вероятно солидная его часть написана на жабе, новое могут как и дописывать на жабе так и писать на котлине, проблем на их стыке не слишком много и они не критичны.
На собесах скорее будут спрашивать по котлину, чем по джаве - но опять же, тут скорее зависит от проекта.
Ну и главное, котлин JVM язык и с джавой очень и очень похож. Я как человек который вначале подробно учил джаву - а потом вообще без какой либо подготовки стал писать на котлине по большей части воспринимаю его как жирный синтаксический сахар для джавы, правда корутины немного поломали этот концепт (до сих пор нормально в них не разобрался, лол)
По итогу - если цель прямо быстрейший вкат, то учи котлин. Но перед этим все таки разберись даже не в самой джаве, а в самой JVM. Хотя бы мельком, что это такое, как работает, что такое JDK, JRE, что такое .class файлы, что такое .java, memory model (heap/stack, GC, shallow copy/deep copy).
>>1822482 >Но перед этим все таки разберись даже не в самой джаве, а в самой JVM. Хотя бы мельком, что это такое, как работает, что такое JDK, JRE, что такое .class файлы, что такое .java, memory model (heap/stack, GC, shallow copy/deep copy). ну для написания приложух в андроиде это не очень надо. Можно смело пропустить и выучить по необходимости (которой 99% не будет)
>>1822641 С JDK/JRE мб перегибаю, хотя у меня на джуновских собесах и за classpath / classloaders просили пояснить.
А насчет остального - использование .class в коде может попасться, memory model тоже нужно понимать - хотя бы то что все объекты передаются по значению, и для примитивов это будет просто значение, а для ссылочных типов данных это будет ссылка и что если даже ее скопируем - у нас будут 2 ссылки на один и тот же объект (видал вкатывальщиков которые этого не понимали). Heap/stack - тоже имхо нужно понимать, чтоб не сильно удивиться от вида StackOverFlow/OutOfMemory + для многопотока нужно знать что у каждого потока свой стек + что делает volatile и т.д...
GC - ну это на минималках тоже нужно понимать, иначе как понять что такое мемори лик и как с ним бороться
>>1822681 На джуновских собесах по ЯП гоняют? Или чисто по андроиду? Я пока только начал разбираться, код еще толком не писал. Когда джаву изучал делал свой проект, игру получилось хуево, но технологий кучу освоил и разобрался с фундаментальными вещами детально.
А под андроид смотрел некоторые видео по созданию приложений, мне показалось кода там мало или я ошибаюсь?
>>1822681 >Heap/stack - тоже имхо нужно понимать, чтоб не сильно удивиться от вида StackOverFlow/OutOfMemory + для многопотока нужно знать что у каждого потока свой стек >GC - ну это на минималках тоже нужно понимать мы точно в треде про андроид сидим?
>>1822683 И по языку и по андроиду. Джунов гоняют по технике как правило от и до (опыта у тебя нет, говорить о нем не получится, вот и гоняют по технике), это уже дальше, чем ближе к сеньоро-архитекторам тем меньше разговоров о голой технике и больше разговоров за жизнь на прошлых проектах и архитектурах.
>>1822693 Ну для меня маркер примерно такой - если у твоего проекта есть реальные юзеры (хотя бы ты сам) то это круто, если же нет - то код и проект посмотреть можно, но это не сильно серьезно. Хотя конечно все равно это идет в +. Скорее если сильно захотят посмотреть как именно ты код пишешь тебе тестовое задание дадут.
>>1822696 В целом да, в жаба-треде насколько помню над ним вечно стебутся. Можешь вначале немного офк посидеть, но надолго там зависать точно не стоит.
>>1822699 Тестовое естественно дома, как правило это небольшое приложение, типичное задание это получить данные с апи, сохранить, засунуть их в какой-то ресайкл и что-то сверху по мелочи накрутить.
Код на собесе тоже могут попросить пописать, (редко, но бывает), но естественно тебя никто не будет просить писать приложение на бумажке, это будет просто задача - начиная от fizz buzz test заканчивая задачами с leetcode/hackerank или чем-то собственного сочинения.
>>1822699 >Тестовое же домой дают? Бывает такое что сразу на собесе нужно писать? Или это для мидло-синёров?
И еще в дополнение, если у тебя реально в резюме будет проект на гитхабе - то вполне вероятно что даже где хотели тебе дать тестовое - его не дадут, а откроют твой проект и быстро посмотрят его. Если ссылок на гитхаб нет - то вероятность нарваться на тестовое растет.
>>1822702 Спс, добавлю себе в сохранёнки, прочту снова когда буду на собесы ходить. Кстати есть примеры сроки вката в андроид, вроде же уровень пониже чем на джаву бэк?
В джаву судя по опыту до джунового опыта год вката, если по 3 часа в день на протяжении года учить/кодить.
>>1822705 >Кстати есть примеры сроки вката в андроид, вроде же уровень пониже чем на джаву бэк? Хз, я шел по пути просиживания жеппы в профильном вузе, соответственно мой опыт и опыт ближайших знакомых это не вкат с 0 за 3 месяца занятия по вечерам, а годы неспешной учебы.
Если взять мой поток - то несколько чуваков уже работало когда только поступали, дальше самые шарящие и работящие уже начали работать к концу второго курса, основная масса рассосалась по галерам примерно в середине 3-го, мой срок вката оказался одним из худших - первая работа спустя 2 недели после получения диплома.
>>1822707 >первая работа спустя 2 недели после получения диплома.
Не так уж и плохо, наработаться успеешь за жизнь, а чилить в универе получится только единожды если ты обычный человек.
Я вот когда вузик окончил мне предложили зарплату в 15к, с тех пор ни дня по спецальности не работал, хотя защита диплома 5/5 , у единственного из группы сука.
Вот раньше была такая вещь, как RoboVM - нечто, позволяющее писать аппсы под iOS на жаве. Но потом её купили мелкомягкие, и оно потухло. Хотя, вроде, есть живой форк (https://github.com/MobiVM/robovm) и ещё BugVM (тоже, вроде, форк, но полудохлый). Ещё есть Multi-OS Engine от Интела и нечто под названием Gluon Client Plugin, использующее GraalVM от Оракла. Может, что-то из этого кто-то из анонов уже использовал? Как оно? Насколько оно надёжное и беспроблемное? Отпишитесь, плиз.
не уверен что это подходящее место для такого, поэтому перенаправьте если знаете куда: мобила побывала у мусоров, хочу узнать что с ним там происходило сняв логи, нагуглил logcat и способ через Android Studio, но насколько я понял эти способы показывают логи в текущий момент. ведутся ли вообще логи системы? если да, то как их достать?
Пацаны, поясните, я еблан или лыжи не едут? Можно ли в ретрофите при ошибке десериализовалки получить ответ в виде строки? А то получается, тебе либо прилетает валидный жсон и десериализуется, либо request.execute выбрасывает ошибку гдето у себя внутри конвертера, и ты не получаешь вообще никакого ответа :\