Это копия, сохраненная 12 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий тред тут:
https://2ch.hk/pr/res/750609.html (М)
Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом.
А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Теперь есть бесплатная версия.
5) BugVM (RIP RoboVM) - идейный наследник ксамарина, а теперь уже и его часть но на Java. Учитывая что Microsoft убила RoboVM, встречаем опенсорсный BugVM.
Отдельного упоминания стоят:
1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу:
Интернет-ресурсы
1) http://developer.android.com/index.html
Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта.
2) http://stackoverflow.com/
Пользуюсь чаще чем первым сайтом. Можно найти практически все.
3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже.
http://startandroid.ru/
и
http://developer.alexanderklimov.ru/android/
Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить.
4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять.
5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну
1) The Busy Coder’s Guide to Android Development - в отличии от остальных книг она обновляется, а так как ведро не стоит на месте а хуярит семимильными шагами, то я бы и не советовал другие книги.
А теперь, так как заебали уже всех, гайд для:
>"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com.
Можно Эккеля "Философия java" почитать.
Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности.
4) Дженерик типы, они как раз юзаются в коллекциях.
5) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
6) Потоки ввода/вывода (streams). Не путать с тредами(threads).
7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
9) Работа с Sqlite, нужна будет в любом случае.
10) Работа с json.
Привет клиент-серверка.
Пишите в треде что добавить
Там про запись видео, а в реальном времени можно?
Как при отладке приложения через Android Studio.
> Вот бы в отпуск съебаться.
Так съебись, в чем проблема?
Какого черта это первое предложение шапки? ОП, ты совсем охуел?
Использовать вьюстейт как прослойку между презентером и вьюхой.
А как можно на эмулятор, Genymotion, например, установить мой .apk минуя Android Stdio? Или скопировать устройство с установленным приложением на другой компьютер с эмулятором?
Тоже около 4 лет, сдается мне что лучше вообще не обрабатывать явно, а использовать нотификации.
1) запустил синхронизацию, без сохранения явной ссылки
2) крутишь экран, после поворота берешь данные из локально базы (только чтение)
3) на onResume подписываешься на нужные оповещения, на onPause отписываешься
...
4) фоновый процесс записал данные в базу, кинул бродкаст что изменил базу
5) в активити/фрагменте/конроллере/вьюмодели ловишь бродкаст и перечитываешь базу
Тут главное что чтение из базы индемпотентное, те его можно вызвать хоть 100500 раз
и в отличие от web запроса оно завершится за короткое время.
Вот видосик с последнего Google IO, может он подкинет пищи для размышления:
https://www.youtube.com/watch?v=70WqJxymPr8
rxjava (оператор cache) + loader (или статик поле, ретеин фрагмент, че угодно), так делают чуваки из elegion, мне понравилось
Лето же. Да и свежих новостей не заметил.
Есть примеры? А то что-то я хз как ровно подвязать лоадер к пресентеру.
видосик не понравился, ничего конкретного, просто рекомендации от к.о. смотрел жопой
как быть если бродкаст ушел в момент между отвязкой и привязкой? будет ждать событие которое уже произошло?
неужели за столько лет не нашлось более элегантного решения?
Ну так ты на onResume должен не только подписываться, но и делать запрос к базе.
Лоаедеры так и работают (может исходники CursorLoader посмотреть).
Шо поделаешь, это андроид (на ios/wp страница не разрушается на повороте).
Не хочешь ебать мозги - отключай поворот.
Ну это конечно ничего не меняет, но спс за инфу
Прикольно. Спасибо за помощь!
> Не хочешь ебать мозги - отключай поворот.
Это не поможет. Кроме смены ориентации есть еще куча других событий config chages.
> Кроме смены ориентации есть еще куча других событий config chages
По моему опыту, в конечном итоге на все config-change кроме поворота окна можно забить хуй (типа смены языка).
Слишком редко они происходят, в отличие от поворотов, которые могут вызывать config-change каждую секунду.
Раньше было мерзкое событие "выдвижeние физической клавиатуры" (motоrola milеston),
но такие девайсы не получили распространения и хyй с ними.
> изменение размера окна из-за многооконности
Сам уже проверял?
лейауты должны меняться, конечно будет пересоздаваться
https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64#.hztmtq4vm
> The default case is that your whole activity is destroyed and recreated, restoring any state you saved in onSaveInstanceState() and reloading all of the resources/layouts. This has the nice property that you know everything is consistent with the new configuration and that every type of configuration is handled.
telegram.me/AndroidChan
telegram.me/AndroidChan
telegram.me/AndroidChan
telegram.me/AndroidChan
telegram.me/AndroidChan
telegram.me/AndroidChan
telegram.me/AndroidChan
telegram.me/AndroidChan
Зарепортил уёбка.
> И щас к ним прибавится изменение размера окна из-за многооконности.
Поворот экрана это тоже смена размера окна: ширина и высота меняются местами.
> Не хочешь ебать мозги - отключай поворот.
При этом не меняется размер тулбара он меньше в ландшафтной ориентации и максимальное число кнопок в меню. Если второе не очень критично, то первое просто отвратительно с эстетической точки зрения.
Кстати, на айфонах в 99% приложений есть только портретная ориентация.
Там то понимают как всех бесит когда решил прилечь с телефоном, а он экран начинает вращать.
> При этом не меняется размер тулбара он меньше в ландшафтной ориентации
Не понял, а зачем он вообще должен менять размер и кол-во кнопок (экран то остается в портретном режими)?
Ты что обычно экран поворачиваешь вместо того что бы нажать на троеточие?
Вставлять поворот везде просто потому что ты можешь, хотя это внесет доп. сложность и ничего не даст юзеру, не очень умно.
Не очень умно не понимать то, что нельзя уйти от пересоздания активити, хотя бы потому что сам андроид может убить активити. Плюс если у тебя хоть какое то нормальное приложение, а не твой список дел, который работает без интернета, то у тебя будут разные лейауты для разных размеров. Если ты не хочешь это понимать, то пиздуй в ios, там делается просто 2 разных приложения под телефон и планшет, что пиздец
Никак нет. Я так понял, что нужно использовать что-то вроде этого, но затрудняюсь реализовать getPhoto. Получается я должен дать путь к изображению в ресурсах моего проекта? Или это все дописывать в поле request.executeWithListener(....) или использовать другие методы из vk api?
final Bitmap photo = getPhoto();
VKRequest request = VKApi.uploadWallPhotoRequest(new VKUploadImage(photo, VKImageParameters.jpgImage(0.9f)), 0, 60479154);
> в ios, там делается просто 2 разных приложения под телефон и планшет, что пиздец
Уже пару лет как там "по умолчанию" общая верстка для iphone/ipad.
> нельзя уйти от пересоздания активити
Еще раз есть частые события (как поворот экрана) и есть редки события
(пользователь свернул приложение, открыл настройки, поменял язык, вернулся в наше приложение).
Второй пункт можно спокойно пережить и пересоздать активити загрузив все заново (ну если ты не догадался кэш сделать).
Я понимаю бушует юношеский максимализм и хочется что-бы все было идеально,
но когда работаешь над серьезными проектах пару/тройуку лет - понимаешь что это не так важно,
как сделать приложение с минимальной сложностью поддержки и внедрения новых фич.
В чем твоя проблема? Ты в параметрах одного метода запутался? У тебя же есть VKApi.uploadWallPhotoRequest(File, long, long).
Проблема getPhoto(), что подразумевается под этим? Да, я похоже даун, ну что-то переклинило. Или мне все это что я писал выше не использовать, а то лишь VKApi.uploadWallPhotoRequest(File, long, long), если да, то как дать ссылку на файл?
Под этим подразумевается твой способ получения битмапки фото. Но ты можешь использовать и не битмап.
Я хотел узнать, что он подразумевает в плане реализации. Вот пример кода http://pastebin.com/v6WtTeQA , но я получил ошибку после прохождения авторизации
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10485, result=-1, data=null} to activity {com.example.molodec.vktest/com.example.molodec.vktest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
Ну а хули, ты читать не умеешь? Там же написано что ему нудна не нулевая битмапка, НАЧАЛЬНИК С КЕМ МЕНЯ ПОСАДИЛИ.
Вообще-то они должны были вставить assert на NULL вначале метода API.
Эх, писали бы на котлине, не было бы таких левых ошибок.
> Не понял, а зачем он вообще должен менять размер и кол-во кнопок (экран то остается в портретном режими)?
Условно числа из головы, в портетной ориениации высота тулбара — 72 dp, максимально помещается 3 иконки. В ландшафтном — 64 dp и 5 иконок. Когда ты поворачиваешь экран, тулбар создается заново и эти параметры обновляются. Если включить обработку смены конфига — они не будут обновляться и высота тулбара будет зависеть от того, в какой ориентации приложение было запущено. Число иконок — тоже.
Так понятнее?
Хотя я понял, ты предлагаешь отключить автоповорот, записав ориениацию в манифесте, а не включить обработку смены конфига.
>>762968
А чем им ассерт бы помог? Вывалилось бы с точно такой же ошибкой. Чувак должен убедится что битмапка не ноль и не пихать туда и все.
> когда работаешь над серьезными проектах пару/тройуку лет
ну это точно не про тебя максимум списки покупок
Чувак, ну это же мувитон для БИБЛИОТЕКИ не проверять аргументы.
И исключение было бы понятно даже для даунов ArgumentNullException("Argument photo is null, GFYS faggot");
>>762972
Есть сторонние библиотеку для @Null/@NotNull (котлин и скорее всего IDEA/AS много чужих поддерживает).
Хотя я так подумал это бы не особо то и помогло.
Больше чем на псевдокод не рассчитывай ок?
1) Получить переменную битмапки;
2) Проверить что она не null;
3) Если не null то начать отправку в ВК;
4) Иначе думай в чем проблема, почему null;
бля ну не добывайся до мелочей, я имел просто проверку на null:
if (arg == null) throw new ArgumentNullException("arg");
Nexus5X на Google Play еще по предзаказу, через бандерольку.
Но тебе лучше пройти в /mobi/nexus тред.
Спасибо братан
В общем, я сделал для местного новостного агенства( типа того) приложение, похожее на приложуху медузы. Добавил несколько фич с отправкой фото-видео и писем и ещё развлекухи немного. Но за ориентр была взята медуза.
Скажи, сколько просить денег за это? Скрины показать не могу, но стиль выдержан заебись(как приложуха хабра).
50к хватит за онли андроид версию?
Или просить 50 за андроид + айос портированную?
Какие цены вообще на такие вещи?
Не потому что дорого или дешево, а потому что продавать сразу две версии как-то не солидно. Выглядит как "2 по цене 1"
а сколько вообще подобные штуки стоят?
Мне кажется, что 50 тысяч - это как-то дохуя, но я открыл разные "ПО на заказ" и там вообще чуть ли не в 500к выходит корпоративное говно.
Причём сроки там адовые, например, 13-17 недель.
Что они там столько времени делают - хуй знает.
> Что они там столько времени делают - хуй знает.
Делают архитектуру например, а не хуяк-хуяк и в продакшн.
> 50 тысяч - это как-то дохуя
Нет, это норм за такое приложение, если ты не индус за еду.
> Сначала сделал, потом денег просит
Вопрос уже в том насколько там щедрые дяди.
> айос портированную?
Как ты на iOS портировал то (или собираешься)?
спрашивают ли сейчас новомодные rx. dagger, mvp и т.д.
я ж старпер, нихуя не знаю из этого
реально ли без этой хуйни хотяб тыщ на 130?
лол, работаю кстати в конторе от которой местные аноны кипятком ссут. особенно доставляет читать маняфантазии, дескать вот там охуенно работать
Похоже на то, что маняфантазии у тебя
Ссу пока только елегиона и роботов. Но ты вангую работаешь каком-нибудь говнояндексе.
http://blog.bradcampbell.nz/mvp-presenters-that-survive-configuration-changes-part-1/
Да, спрашивают. Андроид скатился до уровня, когда появились миллионы фреймворков и нужно все их знать, это был вопрос времени.
За Хаскелл дают +300k
Какого это?
Есть желание и возможность запилить игорь под Андроид, но вот Джаву не знаю.
Соблаговолите пройти в /dev/Unity тред и перестать отвлекать нас от серьезных беседъ
https://2ch.hk/gd/res/262023.html (М)
>Как_сделать_клиент_серверку_без_костылей_2016
>серьезные беседы
>>763627
На голом NDK ты далеко не уедешь. Хочешь сосать плюсы - используй Cocos2dx, хочешь сосать жабу - libGDX, хочешь шарпы - Unity
А, всё, нашёл. В глаза ебусь
а что не так с ассертами? вот студия советует ей проверять как вариант
Это философский вопрос.
Из релизного кода они будут выкинуты. Раньше так было.
http://stackoverflow.com/questions/6176441/how-to-use-assert-in-android
далвик не понимает их, хз как art
если с мессенджером и лк - 150+, без - порядка 60-120 в зав-ти от наглости
Сегодня попробовал сделать то приложение, которое мы пилим на фонгапе, сделать на джаве и кончил радугой, годнота лол.
конечно, добрые люди в мусорку обжевки ведь выкидывают, мы ведь программисты под ведро, для нас специально
какой нормальный стартап будет набирать джуниоров?
Многовато, я бы больше 15к не дал. А в стартапах вообще принято работать за доширак и обещания процентов от продаж, КОГДА ВСЕ ЗАРАБОТАЕТ.
презентуй себя как мидла
кидаешь ссылки на своичужие аппы в сторе
приписаваешь себе опыт в noname конторефрилансер
> приписаваешь себе опыт в noname конторе
Двачую этого комбинатора. "Работал удаленно, было несколько заказчиков, сейчас всех уже не помню, код показать не могу - коммерческая тайна"
Если есть свои нормальные проекты (грамотная архитектура, паттерны, тесты, доведены до конца и работают) на github/bitbucket - будет звучать убедительнее. Если есть приложения в Google Play - еще убедительнее (но там надо 25$ за регистрацию вроде).
>(грамотная архитектура, паттерны, тесты, доведены до конца и работают)
Половина мидлов этого не умеет.
Можно, но смысл ведроида даже не в архитектуре, а в знании костылей.
Архитектуру на ариксе можно выучить на неделю.
Написано, что его радиус равен двум СКО. Но почему он тогда не меняется при движении, когда разброс координат увеличивается?
Ебанаты, вокруг ебанаты.
Да.
Поясните за охуительные анимации, куда копать?
Парниша, ты вообще о чем?
https://code.google.com/p/android/issues/detail?id=72746
Есть ли еще способы получения координат нажатия из сервиса?
Как правильнее написать API, которое дергает сервер и возвращает результат? Сделал пока несколько AsyncTask-ов в отдельном package, с setCallback-ами - при onPostExecute, вызывается этот callback.
Джавы не знаю, буду рад совету как это делать канонично.
http://pastebin.com/Ng7QTRAJ
если закомментировать блок условия, то всё работает, иначе выдаёт IllegalStateException
http://pastebin.com/WDviMWqN
name и password -- строки, объявленные как package-local поля класса. Алсо, эксепшен возникает при любой попытке досупа к ним.
Caused by: java.lang.NullPointerException at takheer.ru.passworder.LoginActivity.toRegistration(LoginActivity.java:44)
И в чем твоя проблема?
Твое приложение умирает в фоне и пользователь восстанавливает его на внутреннем экране. Что будешь делать?
Я понял твой вопрос. Моя проблема в том, что я плохо понимаю суть NullPointerException.
Создал я два поля, проинициализировал их в onCreate, попытался в других методах эти поля прочитать. Вылез NPE. Предлагаешь тупо обернуть в try-catch?
Можно еще проверять, если поле с твоими данными занулились, отправлять юзера на сплешскрин.
Ну а по хорошему бд конечно или хотя бы файл. Гуглы не советуют использовать бандлы для хранения данных.
Уноси своего братишку с сладким хлебушком, поехавший.
Сохранять позицию пейджера для каждого id модели в карте?
Сабскрайбера можно определять отдельными action1. Передаешь 2 таких в subscribe и сокращаешь за счет лябдопреобразования.
И хули у тебя не через flatMap сделано?
RX тоже хипстерский тренд, но он взлетел. Котлин тоже может взлететь, но на это ему нужно еще года полтора точно.
ок, я уже поменял subscribe на flatMap, получилось почти то же самое, но вот насчет того, как сабскрайбера отдельным action сделать вобще не ебу, буду признателен за пояснение, если тебя не затруднит
я напиздел, нихуя с flatMap не получилось, cyclic inference выдало и нахуй меня послало
Твоя рабочая лошадка хотя бы в 2-3 процентах коммерческих приложений используется?
> В сторе >1kk приложения,
> языку меньше год,
сам то как думаешь?
Тем более никто не будет переписывать коммерческое приложение с 0 на другом языке.
Я думаю он про то, как сделать что бы по этому бару можно было быстро скролить, как в adobe pdr reader'e например. Или в контактной книжке по буквам.
> Или в контактной книжке по буквам
https://github.com/krimin-killr21/MaterialScrollBar
Вот например.
Надо будет поковырять что бы для всего можно было применять.
Во flatMap вторым аргументом можно передать функцию агрегатор, которая должна либо запихнуть bar в foo (или наоборот), или составить из них Pair<Foo,Bar>.
Но я слышал о NDK и наслышан что телефонки умеют попиленый openGL с шейдерами и ништяками.
че ты вот зеленишь?
я достаточно хорошо умею cpp и GLSL но на пеки. что по ndk и gles в одной связочке есть?
«Триумфальную арку» Ремарка
Около 500 записей.
Все в текстовом виде, только видосик с ютуба отличается. Ну мб еще какая то картиночка в пункте списка
Я пилю приложуху, но всё происходит как-то без плана.
Есть план того, как приложение должно выглядеть.
С чего надо начинать?
Вот смотрите.
Там будет сплэшскрин.
Потом открывается спарсенные заголовки.
По клику на эти заголовки открывается статья.
Сверху над заголовками есть кнопка, которая показывает другие жанры(переход на новую активити).
Так вот. Я сначала запилил заголовки, а потом опомился, что нужно делать сплэшскрин. в итоге два часа мозгоебли только с переносом строчек и копипастой.
Это меня выбесило и я снёс к хуям весь проект ,потому что запутался. Не могу работать, когда не понимаю, что и где лежит и всё перепутано.
Как быть?
А что, добавить новую активити для сплешскрина и установить для неё интент фильтр - не вариант?
запутался, говорю ж(
> Это меня выбесило и я снёс к хуям весь проект ,потому что запутался. Не могу работать, когда не понимаю, что и где лежит и всё перепутано.
Проиграл. Но все же ты продержался дольше чем многие другие. Тебя еще ждет замечательный мир несортируемых по папкам лейаутов и дроваблов.
https://ru.wikipedia.org/wiki/Git
Научись делать бранчи, теги, планировать изменения по коммитам.
В итоге сможешь откатывать на любой пред. стадию и экспериментировать с фичами не боясь зафакапить наработки.
Спасибо.
до этого я делал рабочую приложуху, всё было хорошо и результат заказчка устроил.
но меня не устроила эта богомерзкая мусорка в папках и подпапках.
Ты просто не можешь представить себе, Анон, как я ненавижу, когда всё разбросано в хуевых непонятных местах.
Ненавижу блять
> как я ненавижу, когда всё разбросано в хуевых непонятных местах.
Кстати, никто не встречал сервиса что бы перегнать PNG (xxxhdpi) -> Vector Drawable?
Заебали эти подпапки под разные разрешения, сил уже нет.
Ну это костыль, я уверен, что можно пофиксить
Пилю сейчас одно приложение в софтверной компании, которая вообще не занимается написанием приложений для конченого пользователя, отлично знаю что это приложение не отобьет мою зарплату, лол.
Мск. Корпоративные приложения. 250к
Может, у тебя какое-то приложение по заказу от какого-нибудь банка, например, и им похуй на окупаемость, лишь бы отчётность была?
С какого хуя я тебе это писать должен...
Мухосранск-миллионник. Разные приложения на заказ. 120к
Адекватно ли, если результат какой-то сложный или несколько разных, присваивать это в приватные поля таска и в онПостЭкзикют доступаться вместо жирного дженерика?
Не попал по пехтонотреду, не серчайте.
Адекватно ли, если результат какой-то сложный или несколько разных, присваивать это в частные поля задачи и в наПослеВыполнения доступаться вместо жирной конструкции обобщения?
стандартный конструктор апки андройд ебашит кучей страшных овер9000 символов строк. Это типо мне не надо?
Выражайся нормально, я тебя не понял в полном объеме. особенно эту часть: "кучей страшных овер9000 символов строк"
Да конструкторы вьюшек в андроиде большие, но андроид это один большой костыль. А насчет сигнатуры метода - ставишь перенос стоки после запятой и все, теперь строка не 120 символов а 80, все по канону.
Можно ли из приложения менять приоритет выполнения остальных программ или даже заставить систему схибернейтить их на время выполнения моего важного приложения? Или не стоит вскрывать эту тему?
Все что угодно, с рут доступом.
Любое foreground приложение имеет более высокий приоритет выполнения.
Популярные они были во времена 1.6, сейчас все на RX
Че сагаешь меня? Просто хочу знать чем это плохо (помимо самого асинктаска).
Аноны, у меня есть фрагмент с вьюпейджером, страницу вьюпейджера пишу в бандл, когда перехожу в другой фрагмент из этого и возвращаюсь вьюпейджер становится на первую страницу, при перевороте всё ок
как собственно сделать, чтобы при возвращении из другого фрагмента там была та же страница, что и раньше?
нету другого выхода?
Если никто не ответит, я завтра вечером из интереса попробую тоже.
А как ты заменяешь фрагменты? Если каждый раз делаешь новый фрагмент и реплейсишь, то конечно не будет ничего запоминаться. Попробуй вместо этого записывать фрагмент под конкретным тагом и в случае реплейса делать fragmentManager.findFragmentByTag() и делать новый только если старого не существует. Если не получится, то FragmentInteraction.replace делать fragmentinteraction.detach+attach.
>то FragmentInteraction.replace делать fragmentinteraction.detach+attach.
то вместо FragmentInteraction.replace попробуй делать fragmentinteraction.detach+attach.
при возврате делаю popBackStack()
> при подсовывании okhttp, он сам разруливает и добавляет в accept-encoding gzip.
> Но логи говорят о том (logging-interceptor), что нихуя он не добавляет
Ты куда-то не туда смотришь (или твои логи показывают не все).
Вот обычный OkHttp 3.2.0 и GitHub API - из запросе и в ответе прописывается gzip.
> А с rx адаптером добавляет?
Не понятно как это должно влиять, ведь это разные уровни абстракции.
Но в любом случае проверил - добавляет.
Попробуй куки очисть и зайти заново на сайт, по идее он должен показать диалог с выбора языка по умолчанию.
ахахаха
700к сити, клиент-серверное приложение, 15к
Ну я теперь храню страницы в переменной класса и подставляю её во вьюпейджер, вроде всё работает
Поворот обрабатываю не в ручную офк.
Стоит в сервис с нотификашкой вынести, так как грохнет кто-то твою активити и видосик не скачается, ставлю 1 звезду.
почему?
А мне кажется все ок, если ты конечно не ловишь OME, возможно стоит добавить всяких освобождений в onTrimMemory
В onDestroy (не очень много смысла) или onTrimMemory (а тут уже больше смысла, лови кейз TRIM_MEMORY_UI_HIDDEN) своей активити и чисти кеш картинок. http://stackoverflow.com/questions/22016382/invalidate-cache-in-picasso
Кто тут шутит — пишешь html+js в ассетах, загружаешь в WebView и пишешь @JavascriptInterface
Нет, там оффсет отдается в пикселях.
Ой все, у меня на трехлетнем теле летит приложение с такой вьюхой, и норм.
Я бы предложил OAuth2 и хранение токена в дефолтном KeyStore андроида.
Конечно используется. И именно его и нужно использовать.
делаю свою вьюшку в активити с полупрозрачным бэкграундом
Caused by: rx.exceptions.OnErrorNotImplementedException: Only the original thread that created a view hierarchy can touch its views.
Код добавления элементов:
public static void fake_loadNewsUsingAdapter(int position, SimpleBindableAdapter<NewsItem> adapter, String lorem) {
/NewsItemObservableEmulator.getFakeNews(lorem)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.flatMap(newsItems -> Observable.from(newsItems.getNews()))
.subscribe(newsItem -> adapter.add(new NewsItem(newsItem.getTitle(),
newsItem.getDescription())), e -> {e.printStackTrace(); adapter.setItemsLoading(false);},
() -> adapter.setItemsLoading(false));/
NewsItemObservableEmulator.getFakeNews(lorem)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.map(newsApiObject1 -> newsApiObject1.getNews())
.map(newsApiItems1 -> translateFromApiDataToNormal(newsApiItems1))
.subscribe(newsItems -> {adapter.addAll(newsItems); adapter.setItemsLoading(false);});
}
что то, что закомменчено, что то, что не закомменчено вызывает эту ошибку. Что собсна с ней делать ?
При этом если добавить в onError что-нибудь типа e -> e.printStackTrace(); то будет выскакивать такая ошибка только на первом элементе из "порции", да притом не со 100% шансом. Почему эта фигня вообще происходит и как ее исправить ? Подумываю вот увеличить расстояние до конца подруженной части списка после прохождения дальше которого инициируется подгрузка
Пардон, звездочки бли зверско скушаны, очевидно перед NewItemObservableEmulator и после setItemsLoading(false)); должны стоять звездочки
упс, то я дурак, .subscribeOn(AndroidSchedulers.mainThread()) нужно юзать , а не .observeOn(AndroidSchedulers.mainThread()) ;
Придумали же епт, названия
> subscribeOn сетевой запрос на главный поток
Разберись с этими операторами полностью, ты опять делаешь не так.
С точки зрения UX, так делать не стоит.
Нужно мне сделать приложение, которое будет хранить пару конкретных файлов в облаке. Т.е. по нажатию кнопки загружать их на какой-нибудь гугл драйв и потом скачивать обратно.
Как это можно сделать?
Сейчас разбираюсь с драйв api, но как-то все мутно, не до конца понимаю как все работает. Получается, что я могу только создать файл в облаке, а потом побайтово скопировать содержимое своего файла туда, все правильно понял?
И можно это делать не только для .txt, а для любых форматов?
Firebase storage для файлов, а ссылки на файлы хранишь в Firebase database.
Toogle button как вариант.
Открываешь код вк или чего-то там и смотришь. Названия пакетов не обфусфируются полностью, если атм какая-то либа нагуглишь по ней, иначе посмотришь принцип.
Боюсь, что может и не хватить много пользователей
Есть помимо офф сайта годные туторы как с этой firebase работать?
Расскажи там 1 GB на всех юзеров или на каждого?
Если на всех, то как там разруливать кому какие данные принадлежат?
>>769904
Firebase storage не может в списки файлов, только доступ по названиям. Для этого у нужен database, чтобы запоминать, у какого юзера какие файлы есть.
Разруливание прав происходит через firebase auth и правила описываемые в storage.
5 GB на всех. Но если мало, то google drive офк.
>5 GB на всех. Но если мало, то google drive офк.
И это возвращает меня к предыдущему вопросу:
>Получается, что я могу только создать файл в облаке, а потом побайтово скопировать содержимое своего файла туда, все правильно понял?
>И можно это делать не только для .txt, а для любых форматов?
А как ты хотел? Ты скачиваешь файл побайтово и выгружаешь в облако тоже побайтово. Другое дело, что в sdk может быть обертка, в которую можно запихнуть io.File, и она сделает все сама.
Можно для любых форматов.
На виндофоне, да ни к ночи будет он помянут, треть программ написаны на html + js, никаких лагов.
А что лучше под это использовать? Google Drive Api for Android или Google Drive REST Api?
Это там калькулятор даже на десктопе стартует по 10 сек.
Недавно увидел это в живую охуел, сам то на маке сижу.
>Можно для любых форматов.
А как эти любые форматы запилить?
Файл создается через MetadataChangeSet.Builder(), там есть .setMimeType("") куда нужно пихнуть тип файла. Список типов вот https://ru.wikipedia.org/wiki/Список_MIME-типов - он достаточно ограничен.
Можно это как-нибудь обойти?
Документация какая-то кривая, на стековерфлоу все жалуются на баги. Нахер так жить?
хер его знает, ui не фризит, не ругается, сам был удивлен
Куда это пихать? Запихнул в build.gradle он говорит что "Gradle DSL method not found: 'test()'"
SettingsActivity.java http://pastebin.com/7QKSmc3y
preferences.xml http://pastebin.com/kFJCcrwR
activity_settings.xml http://pastebin.com/rBg10mz3
> android.preference.PreferenceFragment
v7, v14 тоже не работают? Да и в них вроде материал дизайн завезли.
Спасибо, с v14 заработало (v7 не смотрел). А что не так со стандартным может быть, не представляешь?
Эти ребята прямо про меня рассказывают, готов подписаться под каждым словом.
TL;DS
SOLID + Kotin + Reactive programming = Рулят
Он застрял во фрагмент менеджере. addToBackStack например. onDestoy вызывается не из-за сборщика мусора, его вручную вызывает фрагмент менеджер же, не?
Есть foreground сервис в котором находится объект-БТконтроллер внутри которого крутится обмен данными с Bluetooth LE устройством.
В активити биндится сервис и таким образом через ссылку на сервис любые фрагменты, наследованные от BaseFragment получают ссылку на БТконтроллер.
Проблема в том, что эта сцука, БТконтроллер не зануляется при уничтожении нахуй, всего. И сервиса и активити.
Что с этим делать?
> Код где?
Какой тебе еще код?.. думаешь так просто "слез с фрагментов точеных, запрыгнул на flow дроченый".
Нет, няш, тут думать надо над чистой архитектурой и правильно разделять UI на custom views.
Еще кстати хорошая идея выноса чистого Java/Kotlin код в отдельный модуль без Android API зависимостей.
Вообще очевидные вещи раскатывают, один хрен года за 3 до этого доходишь сам.
Какого хуя LeakCanary не работает? Просто ничего не происходит, юзал её месяца два назад, она постоянно брала дамп и анализировала его, щас нихуя
ПРОФАЙЛЕРОМ померь
Уже собираюсь реализовывать через парсинг RSS. Вопрос только в том какой именно новостной сервис использовать, чтобы был весь вышеперечисленный контент. Что посоветуешь, Анон?
> Kotin
> Это и так очевидно.
Не всем
Кстати, это "полный жизненный цикл фрагмента" (пикрил) еще на Google IO показывали.
https://www.youtube.com/watch?v=k3IT-IJ0J98 (╯°□°)╯︵ ┻━┻
Видео с IO дает как-раз лишний повод задуматься о том что фрагменты зачастую избыточны.
Retrofit + SimpleXMLConverter + http://pojo.sodhanalibrary.com (что-бы сгененировать JAVA классы из XML) + Picaso/Volley/Glide (для картинок)
Спасибо, но это и так понятно, а вопрос
>какой именно новостной сервис использовать, чтобы был весь вышеперечисленный контент.
Ну если ты в /pr/ пришул с таким вопросом, то очевидно что
http://www.gay.ru/news/rainbow/rss.xml
title, pubDate, description это не все что надо, должна же быть еще картинка, потом подробное описание и фото/видео галерея
Создай сам, захости на firebase свой xml и не еби мозги с хуйней, никто тебе здесь не будет искать rss.
Эй котлиноблядь, они там че объебались? Как я блять без бандлов буду?
Рисуй на канвасе повернутые битмапки, обрабатывай onTouch всей вьюшки. Или сделай прямоугольные кнопки которые друг на друга накладываются, но это может привести к хуите.
Ну так нафиг ты юзаешь EAP, у меня на 1.0.2-1 все OK
Будешь обзываться, не буду отвечать.
>>771104
На Android 4.1 (скорее всего) и выше можно что-то похоже сделать через: ViewGroup + View.setRotation
Код: http://pastebin.com/uHaUGcXs
Я использовал 1.0.2 это разве early?
кстати, а как в firebase просто сделать запрос за данными, без взякой хуйни типо подписка на изменения
> Будешь обзываться, не буду отвечать.
Пиздец неженка, смотрите ка, на анонимной борде слегка его оскорбили.
Ну вот ты отрисовал с помощью поворотов, теперь лови клики. Ах да, твои нажатия не выглядят по человечески. Нет красивой анимации нажатия.
Я пока их еще не начал делать, но смотри как я думаю. Я по нажатию буду делать invalidate и запоминать координату нажатия, потом я по координате определю куда юзер ткнул и уже в onDraw буду подменять битмап на нужный в определенный момент, как-то так. А когда юзер уберет палец с экрана снова перерисую, только все битмапы одинаковыми будут. Как-то так.
Да, по другому никак, сделаешь xml аттрибуты для нажатой битмапки и не нажатой, будет норм.
Есть метод что-то типа requestSingle, который отписывается после первого вызова.
Я тебе про firebase hosting говорил, заливаешь xml/json/любое говно и выкачиваешь по прямой ссылке в приложение.
А, точно. Меня просто иногда кидает на сгенерированный R класс. Например v7.preference.R.layout.preference xml можно найти в ресурсах, но студия не понимает. Это как-то фиксится?
(память не вычищяется)
Ангел?
Maemo-dev ITT
да там вообще не вычищается, или что я там должен вычитать про GC что в лолипопе он не работает?
что ты несёшь кретин? При чем тут SOLID?
Давай, расскажи мне про OCP,LSP,ISP.
Как у тебя это всё реализуется. Каких-то базвордов понахвотался, шёл бы ты отсюда.
PS А чё, Java+SOLID не рулит?
Короче ты кретин.
Любое говно + SOLID рулит.
А ты дегенерат который котлину приписывает вещи которые были придуманы за 20 лет до него
Ни разу не толстота же.
Ну раз пришел, ответь как на вопросы:
1) что там mvc/mpv/mvvm?
2) что там с поворотами?
3) есть ли там какой-то аналог биндинга (как в mvvm)?
1) Я делаю по mvp все, и мне более чем нравится. Для mvvm извольте юзать data-binding или что-либо наподобие, ибо у этой либы цель вообще иная.
2) Не смотрел, но коли могу манипулировать State-ами вьюх, то и повороты обрабатывать не то чтобы сложно было. Если интересно - могу завтра попробовать и отписать.
3) см п1. Хочешь связывание - используй другие библиотеки, эта сделана не для того, чтобы биндить данные.
P.S. Но только учти, что будет очень непривычно :)
Если не возражаешь - завтра, я просто уже посидел часиков 10 в кафе за компом и у меня рвотный рефлекс на создание вьюх ^_^
заметано
Бегло порылся в google.translate API, он вроде присобачивается только к сайтам для перевода оных. Есть какие-нибудь встраиваемые базы, которые можно использовать в своих приложениях? Онлайн/оффлайн не так важно, главное достаточная гибкость и уже не готовое отдельное приложение.
Как порешает тогда и приходи.
> он вроде присобачивается только к сайтам для перевода оных
https://cloud.google.com/translate/v2/translating-text-with-rest#translating-a-single-string
да вот нихуя, приложения в цене только растут, пряморуких кодеров все меньше и меньше, спрос на услуги все больше и больше ( живу в ДС, опыт - год, работу предлагали трижды, сейчас на аутсорсе в веб-студии, средняя цена проекта ios + android + backend - 300-450к )
Спасибо. Вероятно что-то пропустил, пойду перечитаю более вдумчиво.
Я с ним отчасти согласен.
Ладно бы были трюки с делегатами, дак нихуя этого нету. А так однохуйственно что ваши вары/валы, что свойства класса из коробки.
Ну это относится ко всему ИТ.
Но когда вижу какие рахиты входят в ит то немного успокаиваюсь. Они никак не повлияют и не задемпингуют мой ценник, ибо они не могут сделать то что я.
Да и советую смотреть на индусов, они самые дешевые, но с ними работают один раз, первый и последний.
Что?
https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android
Спасибо.
Активити берет из бд, показывает элементы. Клик на элемент -> другая активити показывает выбранные первой из бд элементы в пейджере. Первая не следить за апдейтами бд, поэтому если во второй брать из бд, ей могут прийти другие данные.
Как они будут другими, если у них айдишники одинаковые будут? Или у тебя там в фоне еще кто-то может выбранным данным что-то поменять, ну тогда здесь флоу какой-то не правильный, нельзя менять выбранные данные, если так пойдет то ты можешь получить выбранные и измененные данные, может какую-то блокировку на изменения вешать?
Можно кстати перевести. В целом, статья годная, всё просто и по делу.
Есть StartActivity, оно запускается при старте приложения.
Если запущен сервис - то в oncreate или в onstart StartActivity произойдёт переход на MainActivity.
Как мне уничтожить к хуям StartActivity после перехода на MainActivity, чтобы юзер по нажатию на back button не попал обратно на MainActivity?
После startActivity(new Intent(StartActivity.this, MainActivity.class) вызови StartActivity.this.finish();
Вызов this.финиш после startactivity не помогает.
У меня StartActivity с флагом singleinstance, т.к. два инстанса мне не нужно.
Такс! Это мой баг. Вызова finish действительно не было там, где он должен быть.
По первому нажатию активити в такс менеджере подсвечивается, но ничего не происходит. По второму нажатию активити запускается.
Почему не по первому нажатию?
ОС: Android 6.
Хоть я и проиграл, но иди нахуй шутник хуев.
Тащи давай флаги с которыми открываешь активности.
Хочу разрабатывать под ведро на питоне. Какие подводные камни?
>>773167
>1) Хуй тебе, а не гайды;
Ну, у kivy таки есть доки. Но в остальном да.
После питона у меня ява совсем не идёт, а в мобильную разработку хочется.
Ох, лол, я уж лучше go подожду. Хотя за хаскель я в своё время брался, но не нашёл ему применения.
Снимаю шляпу.
Ну хер знает. Обычно фортрана хватает, а покупать какую-то специальную клавиатуру и переходить на другой язык только потому, что он современнее - это хипстерство крайней степени.
https://blog.jetbrains.com/kotlin/2016/06/kotlin-night-recordings/
https://www.youtube.com/watch?v=POZmfjRHdfE
вот код:
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="0dp"
android:id="@+id/icon"
android:src="@drawable/lightblue"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="italic"
android:paddingTop="0dp"
android:paddingRight="50dp"
android:id="@+id/Itemname"
/>
что дописать?
Ты понимаешь что это неправильно? Сделай картинке wrap_content что бы не было белых полос, так у тебя картинка будет хуевится. И да, вместо fill_parent поставь match_parent, не тащи старье.
Фанбои никому не нравятся.
>>773257
Будут проблемы с производительностью на больших изображениях.
Вместо этого, лучше использовать fitCenter() или centerCrop() у Picasso/Glide.
> singleInstance
Это и есть флаг. А он тебе нужен, или ты его просто как написал? У меня были проблемы с ним, когда я открывал хром табы и пытался перейти назад. Мне не давало и выкидывало обратно в хром.
Я на самом деле от математики далёк, так что мне ни APL, ни фортран не понадобятся никогда.
Мне не хочется, чтобы активити в которой биндится сервис и производится всякая ресурсоёмкая залупа была создана в двух экземплярах, а это вполне возможно сделать пользователю.
При помощи singleInstance это исправляется.
Даже с launchmode="standard" ничего не меняется.
У меня кстати на MainActivity сделан переход с IntroActivity, которая в манифесте помечена как android.intent.action.MAIN.
Заметил сейчас, что иногда MainActivity с первого прикосновения открывается из TaskManager. Но обычно с двух. Причем после первого прикосновения никаких методов никаких активити не вызывается. Со второго - как и положено onCreate и далее всё работает так, как и предполагалось.
Мистика какая-то. Уже выкидывал весь код из onCreate, из onDestroy, из OnBackPressed - не помогает. Не пойму где спрятался косяк.
Для каждой строки есть картинка.
Проблема в том, что картинок приходится делать столько же, сколько и строк.
Но я хочу, например, не знать количество строк и циклом заполнить массив картинок. Куда писать цикл?
Думаю, код поможет понять мою идею.
В onCreate если пишу цикл for, то вылетает. если делаю Integer[]someName(){
}и return, то тоже вылетает.
Подскажите, как забить циклом картинок по количеству строк?
А какой есть ещё вариант?
такой вариант сработает?
ImageView whoamiwith = (ImageView)findViewById(R.id.whoamiwith)
и потом в цикле Integer=whoamWith;
Сработать должно?
>Но я хочу, например, не знать количество строк и циклом заполнить массив картинок. Куда писать цикл?
И как ты узнаешь размер массива картинок?
Я посмотрел код, и нихуя не понял. Что вообще за тупость происходит? Тебе нужно как-то раскрасить листвью что ли? Тогда используй recyclerview и itemdecorator. Не хочешь делать так, а хочешь просто сделать красивое чередование картинок? Сделай массив из все картинок, у тебя это будет
Integer[]imgid = {
R.drawable.lightblue,
R.drawable.gray,
R.drawable.blue,
}
и получай нужную картинку просто по imgid[position % imgid.length]
Блять, ты долбоеб? Может у тебя еще суммирование лучше умножения так как быстрее?
Если ты хочешь избавиться от ручного заполнения массива imgid, то
1) переименовываешь нужные картинки в image_0.png, image_1.png и тд
2) В цикле вызываешь getIdentifier (возвращает ID ресурса по его имени) подставляя имена картинок, типа:
getResources(). getIdentifier("image_"+i+".png","drawable",getPackageName());
https://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String, java.lang.String, java.lang.String)
ну тогда называй картинки "опасные новости.png" "сверхопасные новости.png" и
в getIdentifier подставляй words.toLower()+".png"
Не, спасибо. Нахуй ты такое говно советуешь? Тебя самого не ебут за такое?
Себе можешь забрать, как раз подойдет под размер твоего ануса, может говно в тред перестанет вылетать.
Ну, если при умножении у тебя всё будет виснуть, а сложение будет работать нормально, то да, сложение будет лучше.
Я бы сделал два массива ресурсов.
Один с заголовками, другой с идшками картинок.
И будешь получать R.array.my_titles и R.array.my_images
Хуйня.
Что говоришь? Твоих советов пожевать? Нет спасибо.
Ну конечно, вы тут ковровую бомбардировку говносоветами устраиваете и сами себя в нем топите.
Нет, нормальные люди в вашем метании говном просто не участвуют, я просто решил немного образумить.
Понятно. Так на будущее, в нормальных тематиках сидят нормальные люди. Вообще удобнее форума не найти.
Но вот залетевшие школотроны из б засирают все, благо им в тематиках особо не интересно.
На скрине видно какой-то прозрачный лейаут.
Имею ввиду ты его пытался сам реализовать через лейауты или взял готовую вьюху - тулбар?
> реализовать через лейауты
> готовую вьюху - тулбар
Так это одно и то же ведь, не? Или что ты имеешь в виду?
На самом деле очевидно, просто он дибил.
Если тулбар не привязать к апкомпатактивити то он так и выглядит. Правда пока не понял какого хера он у тебя прозрачный.
Анонимный форум, что тебе не нравится?
Ну а как иначе? Не могу же я вас бросить.
Спасибо, друг. не знаю, кто в треде отписывался - это был не я. Твой совет помог. Прям то, что надо!
700 чаёв с меня
Ты о чем вообще?
Если ты про sqliteopenhelper, то он никогда не ПЕРЕСОЗДАЕТ базу,
он может только ее проапдейтить
Только если ты сам в онАпгрейд/онДаунгрейд такое не сказал делать.
1) Прямо в моделе и далее вызывать методы презентера по результату выполнения асинхронной задачи?
2) В презентере. В моделе при этом реализовать синхронный доступ к данным?
90% верстаю мышкой.
Остальные 10% через XML.
При этом в custom view делаю так, чтобы в редакторе они отрисовывались точно также, как и в приложении.
У меня есть три кнопки, между ними - пустошь. Вот пустошь в линеар можно забить либо бэкграундом, либо сделать android:divider и даже сделать divider_height и цвет.
Как сделать divider(или его подобие) в GridLayout?
А если у тебя три кнопки, то просто сделай LinearLayou с orientation: horizontal
Я никогда не использовал android:divider. Но если ты использовал его в LinearLayout и хочешь сделать что-то подобное в горизонтальном лэйауте, то очевидно,что нужно использовать тот же самый LinearLayout, просто с другим параметром ориентации (горизонтальная вместо вертикальной).
Тогда попробуй обернуть кнопки в фреймлэйауты, ставь нужные маргины кнопкам внутри фреймлэйаута, а уже фреймлэйауты разукрась, как хочешь. Между фреймлэйаутами вроде не будет пустоты. А сами фрейм лэйауты запихни в горизонтальный линеарлэйаут. Можешь заменить фреймлэйауты на кардвью, если хочешь элевэйшн и красивые уголки, можешь заменить фреймлэйаут на релативлэйаут, если хочешь сделать дивайдеры какими-то особенными вьюшками.
Если хочешь какой-то простенький бэкграунд, типа однотонного цвета сзади, то обойдёшься без фреймлэйаутов, просто линеарлэйаут, оборачивающий кнопки, с нужным тебе бэкграундом.
Ну и вариант с ресайклервью с гридлэйаутом и статическим списком объектов и кастомным декоратором. Дохуя кода, сложная обработка кликов по кнопкам, но зато все дизайнопроблемы кладутся на совесть андроида.
Хуя там подбородок у трапа
Во времена android 1.6 писал и так и эдак, в любом случае с asynctask получалась полная лажа.
Хотя для моделей без asynctask было проще писать тесты.
В любой подходе mvc/mvp/mvvm юзать asynctask это устаревший подход.
Asynctask это api-костыль что внести в java 1.6 работу с асинхронными очередями команд как и handle/looper.
x) AsyncTask нельзя нормально зачейнить,
x) для них нужно порождать подклассы либо погружаться в колбек-хел,
x) ну и конечно там много бойлерплейта (особенно если пишешь в стиле java 1.6).
Используй RxJava, это сразу снимет большинство головной боли.
Там и асинхронность будет и тесты легко писать.
Вот допустим, у меня сейчас есть проект, довольно большой, в нём я использую асинктаски для одной цели - конвертации изображений (из файловой системы или в виде массива байтов) в битмапы. Соответственно, в асинктаске тупо пять строчек кода декодирования BitmapFactory с нужными параметрами, плюс абстрактный коллбэк в UI, чтобы я реализовал его в нужном месте и сделал с битмапом необходимые действия. За несколько месяцев разработки не сталкивался ещё со случаем, когда этот механизм меня подвёл бы. RxJava не умею. Вопрос: стоит ли прямо сейчас попытаться заменить этот асинктаск на RxJava-аналог или я не получу никакой выгоды от этого?
У меня задачка по-проще, думаю не стоит усложнять применяя всякие сторонние библиотеки.
Мне нужно выбрать через contentResolver некоторые данные по медиатеке пользователя.
Нашел AsyncQueryHandler - кажется это то, что надо.
Получается максимально простое взаимодействие с моделью:
//вызов из Presenter
model.getArtistsList(AsyncQueryHandler callback);
Усложнение - это путь в никуда.
У меня тоже есть одно место, где используется AsyncTask - внутри Loader для загрузки данных из кэша и апдейта кэша. Работает мегастабильно, при том, что сделано очень просто.
Хм, точно. Это можно сделать через CursorLoader.
Пока не знаю что из этих трёх способов лучше.
Вариант с AsyncQueryHandler выглядит самым компактным.
Делай через Loader, пусть это и гряный код, пушо придётся имплементить коллбэки непосредственно во View, зато это рекомендуемый способ работы с БД.
А зачем загружать данные (из сети) прямо внутри Loader'a?
Я всегда по-другому делаю: Loader загружает данные только из БД. Сервис получает данные из сети, сохраняет их через ContentResolver в БД. После этого, Loader автоматически получает notification, что данные были изменены и сам их перезагружает.
Я думаю твой вариант хорош, когда загрузка данных из сети длится достаточно долго.
Кстати, а как правильно: в случае с MVP получать от модели уже ГОТОВЫЕ данные или что-то промежуточное, к примеру Cursor с некоторыми полями, что далее уже преобразуется в объект, который лежит внутри ListAdapter?
У меня всегда адаптеры работают с Cursor'ами. Именно поэтому обновление данных так удобно и происходит (CursorLoader + ContentResolver).
А если ты будешь сохранять свои элементы как массив/список/что-то еще, то тебе самому нужно будет реализовывать механизм оповещений и обновлений.
Может, для памяти плохо или ещё что?
не дохуя
От проекта зависит. Для хэллоуворлда 10 конечно дохуя. Для серьезного проекта уже нормально.
А фрагментов сколько?
Как сделать полупрозрачный фрагмент с вьюпейджером, где будут картинки (т.е. обычная галерея). И ещё, как сделать transition анимацию из вьюпейджера в вьюпейджер? transition name вешал и на картинки во вьюпейджерах, и на сами вьюпейджеры, но че то не получается.
> Как сделать полупрозрачный фрагмент с вьюпейджером
Так же, как и сделать полупрозрачный фрагмент без вьюпейджера.
> как сделать transition анимацию из вьюпейджера в вьюпейджер
Что?
что что? Надо сделать анимацию перехода картинки, я делал это с двумя разными картинками не во вьюпейджерах, но как сделать это со вьюпейджерами хз
есть фрагмент с информацией о чем-то, там в коллапсинг лейауте маленький вьюпейджер с картинками, по клику на картинку в этом маленьком вьюпейджере должен открываться фрагмент, но уже с большим вьюпейджером, с теми же картинками. И при открытие фрагмента должна происходить вот такая анимация https://guides.codepath.com/android/Shared-Element-Activity-Transition
Это большая и сложная задача. За тебя её тут никто решать не будет. Гугли разные варианты, пробуй.
В любом случае, делать анимации под android - это боль. Что-то более-менее нормальное можно сделать только для api >= 21. И то, очень много проблем. На последнем IO был пример с похожим поведением, что тебе нужно.
Проще выбить дизайнеру зубы. А то открывать в вьюпейджере фрагмент с вьюпейджером попросто хуйня.
никогда не юзаю, я олдфаг?
Это копия, сохраненная 12 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.