Роман
Я купил Хоноры, Нокиа и нуль.....
Роман
Просто пэпэц печалька
Роман
Получается яблоко создало более лучше библиотеку? А то у них поддержка даже старых девайсов
Maxim
MVP это только presentation слой (если речь о Clean Architecture)
Darya
Darya
В results я обращаюсь через getJSONArray, а как достучаться до поля webTitle
Sergey Mitrofanov
@Mironov_Boris однозначно clean architecture. Но в мире андроид ее реализация - довольно не тривиальная задача. Я в нашем проекте внерил, уже год как пилими - все прекрасно, даже распоточили, чтобы вся бизнес-логика работала в отдельном рабочем потоке. Но пока еще есть неоднозначные места (например списки). А вообще, если проект разовый, не большой, то можешь на чисто MVC как в примерах у гугла написать ) Заморачиваться с архитектурой выгодно, если проект серьезный, и планируется его заметное развитие... Реактив не рекомендую - слишком не гибкий подход ИМХО.
Sergey Mitrofanov
Получается яблоко создало более лучше библиотеку? А то у них поддержка даже старых девайсов
Вообще-то неа, не таких уж и старых: У жены iPhone 6, и на него AR не завезли ) Только начиная с iPhone 6s: 6s(+), SE, 7(+), 8(+) И то, в сети кто пробовал, говорят что достойно и по красоте работает только на 8-рках...
Aleks
Привет всем. Есть у кого пример со списком, чтоб при нажатии на элемент вызывался другой фрагмент/активити и там уже была детализация выбранного элемента? Или чтоб видео показывалось.
Sergey Mitrofanov
У нас были планы Tango делать, даже девайс под это с год назад брали, но руки так и не дошли. Да и сам Танго, я так понял, уже не выживет, коли в пикселях вторых AR запилили без него...
Sergey Mitrofanov
Привет всем. Есть у кого пример со списком, чтоб при нажатии на элемент вызывался другой фрагмент/активити и там уже была детализация выбранного элемента? Или чтоб видео показывалось.
А в чем сложность? Делаешь ресайклер, описываешь адаптер. Обрабатываешь нажатия на вьюхолдере (через назначения листенеров в онбинд) В адаптере описываешь интерфейс слушателя, делаешь сеттер для него. А из обработчиков нажатий дергаешь этот листенер. А вот уже в ативити/фрагменте при создании адаптера назначешь листенер, и по событиям листенера делаешь что хочешь: хоть активити меняешь, хоть фрагмент... Если хотите видео прямо в списке - разочарую. Стандартный медиаплеер из АПИ не умеет без косяков делать больше одного окна с видео одновременно. Если так сильно нужно, имеет смысл поискать сторонние либы...
Gerc
callback hell
Так он и в ириксе есть
Gerc
Только линейный
Sergey Mitrofanov
А что вместо реактива?
Ну для начала всегда должен идти вопрос: А для чего реактив? ) Как пример: У нас в архитектуре презентер отделен от фрагмент интерфейсом, и интерактор отделен от фрагмента интерфейсом. Понадобилось выделить логику в отдельный поток. Коллега говорит "а давай реактив сделаем!". Прикинули туда-сюда и выяснили, что пришлось бы чуть ли не всю архитектуру под него переписать. И плюс связать 2 противоположных конца (вызывающий обязан знать о методах во всей цепочке вызовов), что если изменение в одном из звеньев, то тянет за собой изменения по всей цепочке. В итоге сделали как я предложил: просто реализовали интерфейсы интерактора и презентра, которые все что и делают, так элементарно постят в нужный поток методы, типа прокси ) фрагмент через него постит в интерактор в рабочий поток, презентер черз него пости во фрагмент в ЮИ поток. И при этом код и тесты вообще нигде менять не пришлось (разве только местами под поточность оптимизировать).
Sergey Mitrofanov
callback hell
Ну, это никак не связано с применением или не применением реактива ) Колбэк-хелл возникает, когда архитектура плохо продумана. Вот у нас нету реактива, и нету никакого ада обратных вызовов ) Просто грамотно разделена ответственность в коде: представлением занимается только презентер, отображением только вью (фрагмент), обработкой действий пользователя только интерактор. И каждый из ответственных занает только о соседях, с кем непосредственно связан, и то через интерфейсы. Ему ни к чему знать о том, кто именно и как отзовется на его требования или позовет его, главное, чтобы контракты (интерфейсы) были соблюдены. А соблюдение котрактов проверяется тестами (в основном мокито)
Nikita
может кто подсказать как сделать обертку? Мне нужно сделать врапер для библиотеки существующей, но я не хочу чтобы у враппера была внутри депенденси на либу. Хочу чтобы в проект подключалась и либа и мой врапер
Aleks
А в чем сложность? Делаешь ресайклер, описываешь адаптер. Обрабатываешь нажатия на вьюхолдере (через назначения листенеров в онбинд) В адаптере описываешь интерфейс слушателя, делаешь сеттер для него. А из обработчиков нажатий дергаешь этот листенер. А вот уже в ативити/фрагменте при создании адаптера назначешь листенер, и по событиям листенера делаешь что хочешь: хоть активити меняешь, хоть фрагмент... Если хотите видео прямо в списке - разочарую. Стандартный медиаплеер из АПИ не умеет без косяков делать больше одного окна с видео одновременно. Если так сильно нужно, имеет смысл поискать сторонние либы...
От идеи воспроизводить видео в списке ушел, хоть уже и приметил библиотеку для этого. Я сейчас в ступор ушел. В общем у меня изначально было одно активити с плеером и кнопкой, при нажатии на которую с сервера берется рандомная ссылка на видео и подставляется в плеер. Затем дело дошло до отображения списков по дате загрузки, популярности, рейтингу. Поскольку пришлось применять NavigationDrawer, то активити с кнопкой преобразовал в фрагмент. Собственно и список у меня тоже фрагмент. Значит сейчас отображаю список с превьюхами от видео, а как воспроизвести уже не знаю. Понятно что нужно создавать VideoPlayerActivity, например, как в приложении ВК. Тогда у меня получится много лишнего кода, то есть писать еще один видеоплеер, когда он имеется, но под другие нужды.
Sergey Mitrofanov
может кто подсказать как сделать обертку? Мне нужно сделать врапер для библиотеки существующей, но я не хочу чтобы у враппера была внутри депенденси на либу. Хочу чтобы в проект подключалась и либа и мой врапер
Противоречивое требование? Врапер, которые не знает о библиотеке? ) В кратце так: для работы с либой кто-то в коде обязан знать, как с ней работать. То есть какая-то часть кода по-любому будет от нее зависить (не IoC). Но чтобы от нее код не зависил, сделай обобещенный интерфейс, который будет диктовать, что требуется твоему коду (классический IoC) И вот уже после этого можешь накидать врапер, который будет и подчиняться этому интерфейсу, и зависеть от библиотеки. Другая библиотека - другой врапер, но основному коду остается пофиг, потому что он отделен от враппера интерфейсом...
Anonymous
Народ, кто-нибудь сможет ответить на один вопрос по архитектуре?
Anonymous
Спасибо
Александр
Я смотрел, там тоже не весь апи. Плюс у пхп'ного доки и вики хорошие. Да и раньше авторы помогали если что непонятно. Сейчас бабла хотят за поддержку и свежие ключи €100 в месяц. (((
Александр
В results я обращаюсь через getJSONArray, а как достучаться до поля webTitle
results это массив объектов, пробегаешься по массиву и достаешь оттуда объекты и уже из объектов достаешь нужное поле
Sergey Mitrofanov
От идеи воспроизводить видео в списке ушел, хоть уже и приметил библиотеку для этого. Я сейчас в ступор ушел. В общем у меня изначально было одно активити с плеером и кнопкой, при нажатии на которую с сервера берется рандомная ссылка на видео и подставляется в плеер. Затем дело дошло до отображения списков по дате загрузки, популярности, рейтингу. Поскольку пришлось применять NavigationDrawer, то активити с кнопкой преобразовал в фрагмент. Собственно и список у меня тоже фрагмент. Значит сейчас отображаю список с превьюхами от видео, а как воспроизвести уже не знаю. Понятно что нужно создавать VideoPlayerActivity, например, как в приложении ВК. Тогда у меня получится много лишнего кода, то есть писать еще один видеоплеер, когда он имеется, но под другие нужды.
Ну штатным АПИ воспроизвести прямо в списке получится только одно, и на скролле будет дико тормозить, я так уже пробовал ) Так что вариант только один - отдельное активити/фрагмент для проигрывания видео. Ну можешь еще как в ютубе сделать: маленькое окошко, в котором играет выбранное видео, пока ты скроллишь список. Но только одно видео. Вообще имеет смысл посмотреть как ютуб сделал, если у вас схожая задача с видео )
Sergey Mitrofanov
это скорее не враппер а экстеншн, но внутри него по идее нужны классы библиотеки
Ну суть подхода от этого не меняется. В цепочке связей кто-то должен знать и о либе и о том, что от него требуется. И хорошая практика, если это "кто-то" один...
Alexey
может кто подсказать как сделать обертку? Мне нужно сделать врапер для библиотеки существующей, но я не хочу чтобы у враппера была внутри депенденси на либу. Хочу чтобы в проект подключалась и либа и мой врапер
Если в той либе нужные классы наследуются от core классов, тогда можно через рефлексию проверять и создавать объект либы, либо если ее нет, то дефолтную имплементацию
Alexey
Alexey
JSONObject jsonObject = new JSONObject("json-response"); JSONArray results = jsonObject.getJSONObject("response").getJSONArray("results"); for (int i=0,j=results.length();i<j;i++) { String webTitle = results.getJSONObject(i).getString("webTitle"); // Add to list }
Sergey Mitrofanov
В picasso не заглядывал, а вот ретрофит просто сам подтягивает okHttp как зависимость
Sergey Mitrofanov
Если в той либе нужные классы наследуются от core классов, тогда можно через рефлексию проверять и создавать объект либы, либо если ее нет, то дефолтную имплементацию
суровый подход ) Мне кажется, что рефлексия - последнее средство, когда исчерпаны все остальные доступные инструменты. Ну или для доступа к тем частям АПИ к которым официально доступа нету )
Yusuf
В Realm (0.87.4) методы remove работают уже? А то у меня RealmResults.remove() пишет Removing not supported
Yusuf
Представители реалма вроде еще в 2к15 гвоорили что скоро заработает
Александр
RC1 https://developer.android.com/topic/libraries/architecture/release-notes.html#release_candidate_-_october_18_2017
Yuriy
Здравствуйте. Занимался веб разработкой на PHP но понял что это не моё, потому что не затягивает и в целом не интересно, а мне нравиться визуализировать свою работу. По этому заинтересовался Android разработкой но не знаю с чего начать и каким-то рандомным каналам в Ютубе нн сильно доверяю по этому решил спросить у людей которые этим занимаються, на прямую. Подскажите пожалуйста, с чего начать, какие курсы изучать и в каком порядке.
Yuriy
Посмотри канал на Ютубе start android
Я видел что такой есть но сеня смутило что 2013 год залито первое видео, боюсь что устарело
Yuriy
Спасибо
Konstantin
А последнее?😂
Yuriy
А последнее?😂
Не посмотрел) свежее?
Yuriy
Лучше в JS фрэймворки, типа react, angular и т.п.
Мне веб в целом не очень понравился. По этому не особо хочу заниматься им. Приложения мне больше симпатичны, по крайней мере на этом этапе. Но спасибо.
Alexey
Чувак, тебе явно на этом канале делать нечего.
Ну просто моё мнение, если человек с пхп начал, то логично что там же на фронтенде можно остаться) Да и там более гибкий UI чем в андройде
Yuriy
Ну просто моё мнение, если человек с пхп начал, то логично что там же на фронтенде можно остаться) Да и там более гибкий UI чем в андройде
Ну с PHP я начал по совету знакомого и я занимался в основном бек эндом, так что в том же js я не силен
JRoot3D
Пингвиненок это местный мем?
Alexey
не красиво
Gerc
уже все выпилили эту шторку, щас посаженная навигация модна
Alexey
*опущенная навигация
Alexey
Ну вот мне у вк не понравилось как сделали
Gerc
ретро
Alexey
в ios по другому навигация сделана? или что ужасно? Я на ios не видел просто
Gerc
С телеграмма
Gerc
Класс Object расширить
Gerc
@ukakhmedoff все правильно?
JRoot3D
Gerc
Родычи
Alexey
Это бот от яндыкса?
Alexey
Айти бот Отан
Anton
Всем привет, подскажите есть константы какие-то для прозрачного белого для кнопки (т.е. нужны цвета для фона, фона при нажатии)? В материал дизайне может или еще где-то...
Alexander
Всем доброго утра.. Ребят... Может кто поможет... Проблема такая... у меня на Андроид 6.0.1, если я запрашиваю CHANGE_NETWORK_STATE пермишн система в дополнение требует еще и WRITE_SETTINGS пермишн, который как я нагуглил на оверфлоу можно получить только через определенный акшн интента... Может кто сталкивался с таким поведением? Просто я очень сомневаюсь что это прямо кошерно говорить пользователю... дай как я тебе буду писать в системные настройки :))
Anton
свои делать
других вариантов нет?
Alexey
других вариантов нет?
ну это не сложно
Alexey
других вариантов нет?
XML file saved at res/color/button_text.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="#ffff0000"/> <!-- pressed --> <item android:state_focused="true" android:color="#ff0000ff"/> <!-- focused --> <item android:color="#ff000000"/> <!-- default --> </selector>
Alexey
android:color="hex_color" android:state_pressed=["true" | "false"] android:state_focused=["true" | "false"] android:state_selected=["true" | "false"] android:state_checkable=["true" | "false"] android:state_checked=["true" | "false"] android:state_enabled=["true" | "false"] android:state_window_focused=["true" | "false"] />
Anton
ну это не сложно
ясно, но просто не хочется делать свои костыли, а заюзать дефолт значения материал диза
Alexey
ясно, но просто не хочется делать свои костыли, а заюзать дефолт значения материал диза
Это не костыли👆🏼цвета из палитры MD можешь использовать. https://gist.github.com/kalehv/bae765c756e94455ed88
Anton
Это не костыли👆🏼цвета из палитры MD можешь использовать. https://gist.github.com/kalehv/bae765c756e94455ed88
в android:color на один из этих цветов можно сослатьcя или их нет в ресурсах?
Alexey
в android:color на один из этих цветов можно сослатьcя или их нет в ресурсах?
у себя делаешь colors.xml, туда это все копируешь и в ресурсах через @color/md_red_500 например используешь