Лето почти закончилось, а вы успели отдохнуть? Ну и думаю потихоньку можно начинать ждать новый нексус, правда что-то дизайн так себе. Алсо, первый месяц на новой работе прошел довольно потно.
Коротко о главном: 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. Привет клиент-серверка.
Народ, есть бд, и я хочу подключить к приложению логин через гугл, чтобы пользователь мог пользоваться этой бд на любых девайсах под его аккаунтом. Как лучше это сделать?
Сап, котаны, суть вопроса - при быстром вводе в searchview, в которую подсказки подгружаются при событии onTextChanged со сторонней апишки, происходит фатал - данные для адаптера были изменены но метод notifydatasetchanged не был вызван. Но только при быстром вводе/слабом интернете
У меня баттхёрт. Я охуеваю, дорогая редакция. Неужели Гугл не смог сделать вменяемый инструмент разработки, который способен запуститься и работать после установки? Установил я этот Android Studio - он после создания проекта-сэмпла начал выдавать какоё-то gradle family unavailable. Оказалось, что это надо лечить установкой какого-то флага для Java (охуеть, как будто сами не могут его передать в Java). Ладно, это сделано - но теперь там следующий уровень ебанизма - невозможность запуска и хз из-за чего: Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Java\jdk1.7.0_79\bin\java.exe'' finished with non-zero exit value 1
На крайняк - попробуй в коллбэке после прилета данных(который, наверное, выполняется в основном потоке, так?) не просто обновлять данные и вызывать notifyDataSetChanged(), а постить Runnable в Handler, который связан с Main Thread Looper. Например, создав этот Handler в главном потоке, или же создав его где хочешь вот так: Handler handler = new Handler(Looper.getMainLooper());
>>814736 Ну и то, что я предложил - это все-таки хак, тебе нужно проверить свой код, там точно есть какая-то хуита(но есть и шанс, что гуглолибы глючат). Ну и я бы советовал смотреть, для какой строки ты принимаешь данные. То есть если вдруг у тебя отправились запросы сначала для "2ch" и потом для "2ch.hk", то может случиться так, что ответ для 2ch.hk придет раньше, а для "2ch" - позже. Поэтому сравнивай данные, которые получаешь с теми, которые хочешь получить.
>>814847 > Думаешь, хранить до тысячи объектов будет удобно Хранил там 3000 объектов. Отказался из-за того, что обновляется фаирбейз дольше. 1 мб сети + куча обработки, а с собственным сервером 100кб gzip json.
>>814910 Тестерам Android Studio нужно выдернуть руки. Или просто отрубить их с корнем. Как можно выпустить настолько глючный продукт, да ещё и рекомендовать его как основное средство разработки, я не представляю.
>>814733 (OP) Короче думаю здесь найдётся кто-нибудь, кто пояснит за MVP. Желательно в виде ссылок на какие-нибудь хипстерские медиумы и чтобы их потом прикрепили к ОП-посту. Ну про медиум шучу, хотя он основной источник всего этого шума.
Я просто часто слышу MVP в контексте андроида и сам по сути понимаю, что активити как god-object по сути плохо. Но штука в том что по всей видимости никаких фреймворков, либ и даже просто шаблонов проектов нет. Типо есть упоминания о презентере, а кто как его делает - это дело личное (даже в прошлом треде анон сетовал про организацию своей архитектуры).
Ладно, допустим, кто-нибудь даст ссылку про то что вот один чел сделал у себя в проекте каким-нибудь определенным образом. Но у меня проблемы уже в самой терминологии. Модель - тут более менее ясно - вся логика, которая выносится и не зависит от андроида - должна быть вынесена. Правда вот где совершать чтение файлов и баз данных, если для этого нужен контекст - наверное инициализировать модель с помощью аплекейшен контекста. Далее Вью - это активити? Или вью - это делать свои кастомные лейауты на каждый чих и в них завязывать логику отображения? И самое неясное презентер. его соотношение один презентер к одной активити? какие задачи он обычно выполняет?
При этом всём наверное ещё используется дагер, чтобы сложнее было найти что где вызывается. И юнит тестам поддаётся только модель? которой передаётся на вход замоканный контекст, файлы, бд и проверяется, что, к примеру, возвращаемый столбец соответствует замоканному?
>>815714 Бля мне просто хочется пожевать риторического говна типа > А делают всё равно все по-разному. И будут дальше так делать. (Насколько по-разному?) Ну просто знаешь хочется немного общения и реального опыта простых пацанов с двача - люди же сюда за этим и заходят. Независимо от раздела.
От статеек с хабра подустал чуток - чисто много текста из разных источников ради кармочки. Ну ладно зачастую там реально неплохая отправная точка.
> View is a layer that displays data and reacts to user actions. On Android, this could be an Activity, a Fragment, an android.view.View or a Dialog. Ну всё что даёт андроид - это вью. Ок. >Model is a data access layer such as database API or remote server API. Видимо набор статик методов, чтобы открывать файлики и там например скачивать странички в стринг. > Presenter is a layer that provides View with data from Model. Presenter also handles background tasks. Ну и всем оставшимся заведует презентер. Видимо это, что называется, логика.
Всё так, анон? Взаимосвязь вьюхи и презентера в одну и в другую сторону? Если элемент списка в бд изменился, то происходит notifyItemChanged, заранее зная про адаптер или присылается новый список и происходит полное обновление вьюхи? Хах, ладно, в общем-то я уже заебался...
Короче можешь ответить за тестирование хотя бы. У меня большинство функций воид и вызываются андроидом. А те, которые более менее чистые - private (ну серьёзно, когда более менее логика накапливается выношу в приватный метод). Мне интересно - неужели у других нормальный воркфлоу, что такого дерьма изначально не накапливается. Или более существенный вопрос - скачиваю xml и паршу в объекты. Мне бы хотелось заранее протестировать парсер, хоть это и внешняя либа, но кто-знает правильно ли аннотации расставлены. Понятное дело, что меня никто не остановит проверить парсер на локальном файлике. Но норм ребята же так не делают? да и в какую папку кидать файл?
А вообще если я тебя конкретно так бешу, то просто нахуй пошли. Я на дваче редко засиживаюсь.
Вот у нас есть Component, который мы успешно сбилдили в Application.onCreate. Как этот компонент правильно передавать в активити/презентеры? Если с активити более менее ясно, там в onCreate всегда можно вытащить getApplication и ему сделать метод getComponent, то как быть в презентере? Делать статик геттер апликейшону? Уебанство же.
>>815937 Создаешь презентер через DI, нужный компонент добавляешь в параметры контсруктора. DI при создание презентера туда сам передаст нужный компонент.
Уважаемые, заранее извиняюсь за тупую просьбу. Просто постоянно все обновляется-меняется и старые гайды чет нихуя уже не помогают. Кто-нибудь может ПОЛНОСТЬЮ, последовательно и для тупых расписать процесс установки всех необходимых инструментов ? Типо сначала андроид студио, окай, какие именно пакеты надо в сдк менеджере, как там подключить джаву, что там с libgdx, надо ли genymotion Был бы очень благодарен.
>>815975 Ничего никогад не меняется. 1) Скачиваешь oracle jdk с сайта oracle, устанавливаешь прописываешь в PATH если за тебя это не сделал твой установщик/менеджер пакетов, проверяешь; 2) Ставишь Ведроид студию с SDK, пакеты для каждого свои очевидно, но если это линукс/винда то надо обязательно драйвера. Лично я ставлю несколько последних Android Build Tools, последние Android SDK Platform-Tools и Android SDK Tools, не превью конечно же. Для каждой платформы под которую разрабатываю SDK Platform, ну и конечно из экстрасов кучу всего. 3) Genymotion елси тебя не устраивает стандартный эмулятор/телефоны меня устраивают; 4) libGDX все просто - у них свой инсталятор, взял и поставил.
Джава сама подхватится, если нет, то ты знаешь где она лежит и прописать ее для студии не составит труда. Возможно потребуется добавить в path и что-то андроидовское, что бы студия подхватила.
>>815982 >JAVA_HOME не достаточно? Надо и в PATH, где javac сидит? Тебе так сложно добавить и проверить? Ты видишь что бы там писалось ДОБАВЬТЕ JAVAC_HOME?
>>816094 Конкретно в nucleus нет поддержки вьюстейта из коробки. С учетом deprecated getView, его приходится оборачивать null чеками и //noinspection deprecation из-за того, что его restartable говно вообще не подходит для неасинхронных операций в стиле: нажал кнопку -> вызвал презентер -> презентер сказал вьюхе переименовать кнопку, и приходится либо прокидывать вьюху параметром, либо получать удовольстивие от зачеркнутого и разукрашеного желтым кода.
> Do not try to make your Presenter control your View Ну и у он охуительно затирает, что вьюха что-то да должна сама решать, а не быть просто вьюхой, поэтому он и сделал этот убеанский механизм restartable. > But when control goes like this: user -> view -> presenter -> view -> presenter -> model -> data, it is just violates KISS principle Кококо нарушение КИСС. Простейший пример. Начать по кнопке загрузку и показать прогресс бар. Как должно быть: buttonClick -> presenter.load -> view.showLoading, но он затирает, что так делать неправильно, и вьюха сама должна решить, переходить ей в showLoading или нет, хотя это явно отвественность презентера.
>>815789 > Взаимосвязь вьюхи и презентера в одну и в другую сторону Зависимость только в одну (вьюха от презентера), а так они друг дружку по очереди вызывают.
> Если элемент списка в бд изменился, то происходит notifyItemChanged И как ты это словишь? У тебя курсор полностью ресетится если меняется один элемент запроса.
> Но норм ребята же так не делают Хули нет то? Это если ты полностью network service тетируешь, то да, ты мокируешь сетевой вызов как "норм ребята". А когда у тебя цель тестирования только парсер то почему бы и нет?
>>816608 Если ты про это (пик 1), то так подчеркиваются любый изменяемы объекты (свойства, переменные и тд). Отключается в настройках темы (пик 2).
Хотя это ведь не спроста. В котлине более идиоматично использовать immutable свойства и переменные. И "плавающих" ошибок меньше будет из-за хранения изменяемого стейта.
Android Studio Бывает такое, что код ведет себя не адекватно в определенном классе, будто его изменения не влияют на работу? Потом ты удаляешь апп, ребилдишь и все встает на свои места? Я уже который раз трачу время в пустую, когда нужно почистить прост :)
>>816853 То что ты там выгружаешь скорее всего не помогает, так как инстант ран разбивает на несколько дексов, и что-то в результате херится так как он думает что все будет ок. Но это елси много изменений сразу замутить.
Аноны, как правильно поступать в такой ситуации: например, у меня есть 3 фрагмента. В первом должен быть просто тулбар, во втором коллапсинг тулбар, в третьем тулбар с табами. Мне в мою хост-активити надо бахнуть в тулбар всё возможное и потом, смотря какой фрагмент, делать что-то visible, а что то gone?
>>815712 Есть какое-то мосби, и ему подобные решения. С лоадерами, файлами и т.д. - это пихают уже в зависимости от реализации либо отдельно, либо в презентер, либо во активити/фрагмент. Советую определиться с тем, что ты хочешь. Разные реализации хорошо подходят под некоторый круг задач. Топового решения нет.
Алсо, многие юзают мвп чисто для разделения логики.
Я захотел стать у мамы читором и украсть у тутошних мамкиных програмистов сраные два бакса. Накатил рут, скачал гейгвардин, но что то нихуя не получается хакать игрули. Нечетким поиском нахожу какие то значения, но что с ними дальше делать чтобы стать бохатым не пойму.
>>817015 ШТОБЕ ГУГЛ МНЕ ВСЮ ПАРНУХУ УДАЛИЛ И В ПЛОНШЕТ НИЗАХОДИЛО!?!?!?!? фридом требует аккаунт гугля, лакипатчер на то и лаки что не всегда выходит. Плюс, есть игрули в которых нихуя доната нету, но читерить в них хочется.
Имеется такая разметка <LinearLayout...> <FrameLayout... android:id="@+id/fragmentContainer"> <ImageButton.../> <ImageButton.../> <ImageButton.../> </FrameLayout > </LinearLayout > и примерно такой код: public void onClick(View v) { ... transaction= fragmentManager.beginTransaction(); transaction.replace(R.id.fragmentContainer,fragments[color]); transaction.commit(); }
Результат на картинке: фрагмент рисуется поверх кнопок. Как сделать, чтобы кнопки рисовались поверх фрагмента?
Подскажите способ отправки файлов метров по 50-100 по http без outofmemory? Я использую multipart, в котором дроблю его на пятиметровые куски, но где-то на четвертом оно падает
>>817089 Попробуй в Atom или VIM, собирать один хрен в конце придется через gradle.
Так же разработку "бизнес слоя" можно вынести в отдельном java-se модуль и проверять правильность юнитестами, выполняемыми на дексктопной java. Дядя Боб скажет "молодца".
>>817183 Не работай с ImageButton. Нахуй она тебе нужна? Что ты подразумеваешь под "спокойно работать"? Загрузить (+ трансформировать) картинку без еботни в ImageButton можно так же как и в ImageView.
В DI нужно иметь отдельный компонент на каждый экран, или один единый компонент инжектящий во все возможное? Если будут разные компоненты, то синглтоны же будут синглтонами на компонент или на все приложение?
Двощ у меня апатия. Пытаюсь стать джуниором, сделал пару проектов. Ну как, сделал. Функционал довольно примитивный, дизайна нет, но кое-что изучил по ходу работы. Два круда с некоторым функционалом и один дёргающий данные из рест апи и показывающий картинки в gridview. Заебали, довёл до определённой логической стадии и видеть их не могу. Решил отдохнуть от практики и подучиться немного. Какие мастхэв скиллы должны быть у джуниора? Из того что точно ещё не использовал/не знаю: ContentProvider, Loader, анимации, датчики, камера, микрофон, карты. Не использовал почти никаких либ, хотел бы разузнать зачем и куда применить хуиту типа dagger, rxjava, event bus. Хотел бы попробовать MVP или чистую архитектуру, но в туториалах везде куча библиотек используется, да и не знаю надо ли мне всё это на данном этапе. Короче, куда мне сейчас податься? Есть пару туториалов по библиотекам и MVP, есть курсы на юдасити, есть гайды в Busy Coder’s Guide.
>>818387 А что, этого хватит на джуна? В хохлостране сейчас не оче с вакансиями, боюсь никто не возьмёт меня такого как сейчас. Энивей, я смогу на фуллтайм пойти только начиная с октября, поскольку есть некоторые дела ИРЛ. Вот думаю до этого времени скилл поднять.
Сап, аноны, выручайте. Пишу список, добавление в который производится динамически. Для каждого View использую ViewHolder ибо элементов внутри вьюхи много. Сначала добавляю первый элемент, все ок, создаю View, нахожу все что внутри и пишу это в ViewHolder. Когда я добавляю в список ВТОРОЙ элемент, и вызываю notifyDataSetChanged(), происходит вот что: 1. Вызывается getView() для первого элемента, convertView равен null (при этом помним что у первого элемента уже было ранее созданное View), поэтому приходится заново его создавать и все находить. 2. Вызывается getView() для второго элемента, при этом в качестве convertView выступает то View, который раньше (еще до добавления второго элемента в список) использовалось для первого, соответственно все ссылки в его ViewHolder'е указывают на вьюшки первого элемента списка, и приходится находить их сначала. Если бы для первого элемента можно было использовать то View, которое для него использовалось раньше, а для второго создавать новое, то все было бы збс. Можно ли это как-то организовать? Я спрашивал здесь: http://stackoverflow.com/questions/38790574/getview-has-its-convertview-null-for-already-existed-item-when-i-add-new-item, но там написали что сделать этого нельзя, мб тут кто-нибудь шарит? RecyclerView не предлагать
>>818586 >Для каждого View использую ViewHolder как я понял, тебе нет смысла юзать ресайклер вью, всё равно там нечему ресайклиться. Складывай всё просто в скролл вью
>>818586 Я не понимаю, в чем твоя проблема. Ну уйдет твоя конверт вьюха второму элементу, пиздец потеря. Ты все равно вьюхам будешь данные назначать в любом случае, даже если они там есть. > RecyclerView не предлагать Схуяли? Хотя он все равно тебе перебиндит вьюху.
>>818611 >>818611 Дело не в назначении данных, ViewHolder хранит ссылки на вьюхи, входящие в состав элемента списка, а потеря в том, что тогда придется находить все эти вьюхи заново (около 20 элементов на каждый элемент списка). Причем даже если convertView != null это не означает что можно просто достать все из ViewHolder, придется заново вызывать findViewById() для каждой вьюхи и только потом присваивать им значения. Более того, раз уж теперь convertView != null не гарантия того, что не нужно искать вьюхи заново, искать их придется и в том случае, когда мы просто пролистываем список (хотя в этом случае их как раз таки можно взять из ViewHolder)
>>818618 > что тогда придется находить все эти вьюхи заново Нет, в этом и суть вьюхолдера. Вьюхолдер привязан к конкретной вьюхе, внутри которой конкретные объекты вью, которые при конверте не меняются.
>>818622 Смотри, если взять случай со вторым элементом списка, convertView != null, но во вьюхолдере этого convertView хранятся ссылки на вьюхи первого элемента, поэтому придется их искать заново чтобы они ссылались на вьюхи второго элемента. Тут без поиска точно не обойтись. Можно конечно вообще не использовать вьюхолдер, но он как раз-таки нужен в тех случаях, когда getView() вызывается не при добавлении нового вью в список, а при скроллинге.
>>818627 > но во вьюхолдере этого convertView хранятся ссылки на вьюхи первого элемента, поэтому придется их искать заново чтобы они ссылались на вьюхи второго элемента Во вьюхолдере convertView хранятся ссылки на вьюхи внутри этого convertView. convertView похуй, какой она идет по счету. Ты не понимаешь сути адаптера, и я даже не знаю как тебе объяснить ее не расписывая целую статью. Надеюсь ты найдешь такую. RecyclerView даже будет понятней для понимания этого механизма.
>>818628 >Во вьюхолдере convertView хранятся ссылки на вьюхи внутри этого convertView Ну я с этим и не спорил вроде
Мне кажется ты просто не понял меня. Когда я вызываю getView для второго элемента, в качестве convertView я получаю то View, которое раньше использовалось для первого элемента, а значит внутри вьюхолдера этого конкретного convertView хранятся ссылки на те вьюхи, которые используются в данный момент первым элементом списка, правильно?
Теперь если я просто возьму эти элементы из вьюхолдера и запишу в них данные, предназначенные для второго элемента, то по сути я перепишу их для первого элемента, а это совсем не то что я хочу сделать
>>818641 > Теперь если я просто возьму эти элементы из вьюхолдера и запишу в них данные, предназначенные для второго элемента, то по сути я перепишу их для первого элемента Да, и это ок. > а это совсем не то что я хочу сделать Ну что ж поделать. Вьюха должна просто показывать данные, а всякие состояния нажата кнопка, не нажата, ты должен хранить не во вьюхе.
>>818646 Просто тогда получается, что если не находить вьюшки заново, то все вьюшки любого элемента списка будут ссылаться на вьюшки первого элемента (так собственно оно и есть, когда я например чекаю чекбокс в 6-м элементе он чекается у всех остальных тоже) >состояния нажата кнопка, не нажата, ты должен хранить не во вьюхе Хм, спасибо, подумаю над этим
Ребят, поясните за The Busy Coder’s Guide to Android Development. Читал некую русскоязычную литературу по андрею. Хочу перекатиться в англоязычную The Busy Coder’s Guide to Android Development. Есть ли вариант вникать в такую литературу, учитывая несильный английский?
Почему Material design выглядит, словно даун-первоклассник нахуярил в паинте кружков и прямоугольников из двух вырвиглазных цветов? Почему отсутствие дизайна в куче статей называется "то касается визуально-функциональной части, то Google удалось объединить принципы хорошего дизайна с инновациями и возможностями новых технологий и науки.
Material design базируется на тактильной реальности, вдохновлен изучением бумаги и чернил, технологически продвинут и открыт для воображения и магии."?
До меня тут дошло наконец, что мне нужен МЕНТОР, т.к. я застопорился. Либо готов вступить в проект. вкtiper2014 Рассмотрю задания энивэй я вообще за любую движуху
Оказалось что проблема была в том, что listView по высоте был выставлен в wrap_content, из-за этого для отрисовки каждого элемента списка getView вызывался по 2 раза, при этом в качестве convertView передавался один и тот же элемент (хз почему). Исправил на match_parent и все заработало
>>818804 > Activity вместо AppCompatActivity Если хочешь разный дизайн на разных устройствах то юзай. AppCompatActivity тащит за собой материал дизайн. >>818809 Ну ананасу с харкача виднее как дизайн делать. Можешь портировать иос дизайн на ведро 1 в 1, есть каста самых пришибленных заказчиков, они как раз так обожают.
>>818279 Ну, например, у меня сделано так. Есть класс от которого наследуются все фрагменты, например "BaseFragment". На стадии создания активити, я запихиваю все свои фрагменты во фрагментменеджер и хайдю их там, чтобы они не перерисовывались. В базовом классе я проверяю при изменении статуса isHidden
http://pastebin.com/btBVwZa9 и пихаю тулбары, которые прописаны в лейаутах фрагментов. Подводных камней не вижу.
Пытался привинтить navigation drawer. Спросил у коллеги в двух словах описать как это делается и тот направил подсмотреть в шаблонах студии. Смотрел туда и еще статейку из гугла, где наворотили и табы и тулбар, и все что угодно. В шаблоне тоже наворочено много ненужной мне левоты через координаторы. Понял, что не понимаю как работает координатор и много много смежных элементов. Короче, вопрос такой: где почитать (на русском языке, желательно) последовательной от простого к сложному информации по теме? Это же называется material design?
Анончики, как через VK API получить список групповых чатов? У самого VK API какая-то бедная документация.
У меня сейчас так: //---------------------------------------------------------- @Override public void onActivityResult(final int requestCode, int resultCode, Intent data) { if(VKSdk.onActivityResult(requestCode, resultCode, data, new VKCallback<VKAccessToken>() { @Override public void onResult(VKAccessToken res) { mAccessToken = res; }
Но реквест всегда выполняется с ошибкой. В error.toString() строка "VKError (API errorVKError (code: 15; ; Access denied: no access to call this method))".
AccessToken вроде передаю нормально. Может, дело в разрешениях в самом вк на страничке приложения? Какое разрешение нужно, чтобы просматривать групповые чаты?
>>819530 > так в принципе уже мало смысла делать Пока пидорасы-дизайнеры будут делать собственный дизайн бокового меню а такие найдутся всегда, смысл будет.
Я вызываю VKSdk.login(this, null). И не ебу, что можно поставить вместо null. Сигнатура функции такая: VKSdk.login(Activity runningActivity, String... scope);
Что такое scope? Что он вообще должен делать? Гугл-переводчик переводит это как "объём". Какой нахуй объём?
В документации ни слова нет об этой функции. Примеров тоже нет. Я догадываюсь, что вместо scope нужно что-то подставить, но не ебу что.
>>819546 >Что такое scope? Что он вообще должен делать? Гугл-переводчик переводит это как "объём". Какой нахуй объём? Ты нахуй сюда пришел? Ты документацию читал? Ещё что-то где-то посматривал? Банально, сука, открой сорцы VKSdk
/ Starts authorization process. If VK app is available in the system, it will be opened to request access from user. Otherwise, UIWebView with standard UINavigationBar will be used. @param activity current running activity @param scope array of permissions for your applications / public static void login(@NonNull Activity activity, String... scope) { VKServiceActivity.startLoginActivity(activity, requestedPermissions = preparingScopeList(scope)); }
>>819550 То есть я, например, должен вызвать VKSdk.login(this, "messages")?
Хуле об этом в документации не написано? Почему даже примеров нет? Пиздец. Блядь, ну посмотрите вы на MSDN - образец превосходной документации. На каждую(каждую, блядь!) функцию расписаны подробно все её параметры, какими они могут быть, что должны делать, ещё и примечания внизу на случай самых разных непоняток. А тут "ну короче у нас есть такая функция, используйте её, только мы не скажем, как".
Я вот знаю только одно значения слова Scope - это область видимости внутри скобочек в языках программирования. А у них, блядь, так параметр называется незадокументированный.
>>819555 Да, давайте хранить документацию непонятно где, а потом называть всех жопочтецами.
>>819559 Чем хорошо-то? Блядь, джава же - ООП-язык. Её создатели должны понимать важность таких вещи, как инкапсуляция и отделение чёрного от белого. Тогда хули у них сорцы вперемешку с документацией идут, когда это две отдельных сущности? Хуле пользователю нужно залезать во внутренности реализации, чтобы узнать, как обращаться с интерфейсом? Где основные принципы, блядь?
Блядь, и так у них в этом плане всё хуже, чем в C++, так нет же, они ещё дополнительно всё смешивают. Так делать нельзя.
>>819565 >>819567 Ой вася, javadoc это приятное дополнение. Документация зависит от создателя, а не от языка. Команда ВК не потрудилаьс сделать отдельную доку, но у самой джавы и андроида, а так же хороших либ есть свои документации где все расписано.
>>819571 Ну допустим, тут ты прав. В любом случае, документация VK API - говно. А оставлять в продакшене в качестве документации комменты в сорцах может только идиот.
>>819575 Ну у Вк не самая худшая документация. Эхх помню пару лет назад смотрю документацию гугла, а потом понимаю что там все диприкейтед и мне нужно форсировано включать английскую версию что бы увидеть новую. Или фейсбук где ты навсегда потеряешься среди ревизий и новых версий, а поиск кидает тебя обязательно на старое.
>>819583 Кажется тебе ответили на другой вопрос. Ты спрашиваешь какую базу тебе использовать на бекенде, или какую базу тебе использовать на клиенте? Если второе, то конечно SQLite, а как ты связывать атм будешь, ну хуй знает, можешь с сокетами поебаться, можешь SOAP, моешь REST Api. Тебе открыты все двери.
Есть одно приложение, которое построено вокруг взаимодействия с несколькими сетевыми API. Для каждого апи есть класс-обертка, методы которого оборачивают параметры в HTTP запрос и шлют его на сервер.
Так вот, как это дело правильно тестировать? Очевидно что мне в тестовом нужно как-то подменить класс, отсылающий реальные запросы, на другой, который отвечает просто заранее заготовленным ответом. Как это лучше сделать? Понятно что надо выделить интерфейс, настоящую и тестовую реализации. А вот что делать дальше?
Тестирование при этом проводится автоматически на CI-сервере, так что вариант "перед тестами вручную что-то менять в коде" не катит.
Я пока вижу два варианта: 1) В коде теста в явном виде вызывать метод у моей Activity, который запишет в нее нужный мне экземпляр апи. 2) Выделить Factory этих апи, сделать отдельный flavour для теста и для реальной версии, в которых они будут отличаться буквально в одной строчке кода - в реальном создаваеом классе.
Есть еще какие-то Dependency Injection типа Dagger 2, я их смотрел но они мне кажутся какими-то дохуя навороченными для такой простой задачи.
Здарова, мужики. Чего-то у вас бедно по инструментам. Хочу вкатиться на месяц-другой, запилить чисто себе говноприлагу типа клиент могильный для сайта, но не хочу/не буду джяву. Ксамарин отпадает так как ради него не собираюсь ставить прошивку для игорь. Что еще есть? В курсе про ндк, это пиздец геморно. Сам чаще пишу на питоне и го. Выблядок хипстерский, ага Что посоветовать можете, кроме бочки и хуйцов?
>>819530 Это опять я. Разобрался немного с шаблоном по nav-drawer-у. Но там создается немного не то. В шаблоне вызывается drawer по нажатию на кнопку в тулбаре, и все это делается через toggle. Я написал то же, что было здесь: https://developer.android.com/training/implementing-navigation/nav-drawer.html за исключением мест, связанных с этим toggl-ом. Казалось бы, пальцем уже можно что-то выдвинуть, но пока нихрена не выдвигается. Вообще, я пытаюсь привязать выдвижение drawer-а к какой-то своей кнопке на экране а тулбар вообще у меня отсутствует. Что мне делать?
>>819751 ИМХО, жаба достаточно вменяема для создания стандартных приложений, нафига что-то менять я понять не могу, лучше уж пусть запилят сборку побыстрее в студии...
>>820447 Сборка и так быстрая, если дать памяти и в отдельной жвм. Я не про косяки джавы, у самого андроида жуткая фрагментированность и куча старых болячек, их надо уничтожить, новая система это могла бы сделать, но вряд ли они откажутся от нашего нелюбимого зеленого гомункула.
>>820447 Андроид был типичным стартапчиком. Его побыстрому сляпали из говна и палок и вовремя заняли нишу. Теперь, когда andorid принадлежит ~90% рынка, нужно переделывать нормально.
По опыту наблюдением за развитием WindowPhone, я тебе гарантирую, там будет: 1) обратная совместимость со старыми android приложениями 2) нормальное обновление в независимости от производителя (как у iOS/WP)
Так что для людей, которые учились программировать, а не задрачивать Java+AndroidAPI - все только в плюс.
>>820447 >нафига что-то менять я понять не могу Там вроде всякие легальные терки с ораклом были, который та еще корпорация зла с анальнейшими лицензионными соглашениями, просто не разменивается на мелочи и суды с кем-то меньшим чем гугл.
>>820465 Господа, вот какое будущие нам готовит Google: 0) OS НЕ на ядре Linux, а чистая Виртуальная Машина, работающая прямо на железе 1) Atom вместо IDE 2) Dark вместо языка 3) ReactJS/Native стиль разработки UI и при этом полностью в коде 4) Кроссплатформа (android/ios/fuchsia) из коробки, это частино решит проблему миграции (android->fuchsia) 5) Material Design везде (и на iOS)
Раз в месяца 3 берусь за новый проект и заканчиваю подключением GCM и это пиздец. Каждый раз всплывают какие то новые баги и несовместимости с обновлением множественных "модулей", рождаются новые костыли. Просто в голове не укладывается что я трачу на это время. По сравнение с "этим" в iOS Apple уже все за тебя сделали.
>>820600 >Какой смысл в этой говняной смеси из жса и жавы? Ты про Dart? ХЗ, спроси у Google. Наверное что бы подмять всех под себе: OS принадлежит Google, язык теперь тоже Google.
Хреновая вообщем тенденция, лучше бы сделали легкий дистрибутив Linux для мобилок. Все бы, тогда писали бы на чем сами бы захотели.
>>820535 Кстати, по последним данным вроде бы Intel Multi-OS Engine закрылся. Видимо, Intel поняли что не смогу тягаться с Google на умирающей платформе.
Я хуею с этого аподила, куча жарников с говном и это называется медиация, блять. Вот такой вот замечательный стектрейс получаю: Fatal Exception: java.lang.VerifyError: com/avocarrot/androidsdk/DeviceInfo at com.avocarrot.androidsdk.Avocarrot.(Avocarrot.java:49) at com.avocarrot.androidsdk.Avocarrot.getInstance(Avocarrot.java:108) at com.avocarrot.androidsdk.BaseController.(BaseController.java:53) at com.avocarrot.androidsdk.BaseController.(BaseController.java:47) at com.avocarrot.androidsdk.AvocarrotCustom.(AvocarrotCustom.java:21) at com.appodeal.ads.native_ad.c.a(Unknown Source) at com.appodeal.ads.y$1.run(Unknown Source) at android.app.Activity.runOnUiThread(Activity.java:4737) at com.appodeal.ads.y.a(Unknown Source) at com.appodeal.ads.y.a(Unknown Source) at com.appodeal.ads.y$a.a(Unknown Source) at com.appodeal.ads.r$b.a(Unknown Source) at com.appodeal.ads.r$b.onPostExecute(Unknown Source) at android.os.AsyncTask.finish(AsyncTask.java:632) at android.os.AsyncTask.access$600(AsyncTask.java:177) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5372) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786) at dalvik.system.NativeStart.main(NativeStart.java)
Все началось с того что мне нужно было установить картинку на весь экран. Она имела размер 1080h на 1920w пикселей. Ну выдало мне мне нехватку памяти. Полез разбираться - нужно юзать битмап и скейлить изображение. Окей, взял со stackowerflow метод - принимает 2 параметра необходимую высоту и ширину и скейлит изображение.
Вначале проверил на 600 на 600 - норм выглядит, норм работает.
Но дело в том что размеры экрана моего устройства (metrics.heightPixels и ширина) как раз 1080 на 1920. И самом собой при использовании метода по сжатию - мне опять выдает out of memory
+ меня смущает что при 600 на 600 она выглядит норм. Может исходный ресурс какое-то разрешение не верное имеет? Или блять что-то не в пикслях считает, а в dp?
>>821137 Спасибо анон, но мне в чем тут проблема хотелось понять. В приложении только одна картинка и есть - фоновая. Не хотелось бы из-за нее одной фреймворк подключать и разбираться.
Эта картинка в drawable лежит. Может нужно в какой drawable-экстра hdpi засунуть?
>>821157 Большое спасибо, после изменения начало хавать 13 метров. Настрою еще что бы на альфаканал не обращало внимание и может чуть уменьшу - вообще отлично будет. Который час уже с этим долбился, ты мой спаситель.
А можешь чуть развернетее объяснить почему так происходило? Оно в 3раза больший размер выводило?
Оно будет так же норм, если я буду пихать в свой drawable-xxhdpi, так?
>>821171 > Оно в 3раза больший размер выводило? drawable аналогичен drawable-mdpi.У тебя xxhdpi, это в 3 раза больше, чем mdpi, поэтому система сама скейлит картинки. > Оно будет так же норм, если я буду пихать в свой drawable-xxhdpi, так? Лучше drawable-nodpi, но я понятия не имею, что ты там делаешь вообще.
Привет анончики. Начал проходить курсы на udacity, там начинается с разметки приложения. RelativeLayout, LiniarLayout и т.д. Вообще ийзи идёт, что-то на уровне легкости html. Ну оно и не удивительно, похожие же языки разметки.
Но у меня есть вопрос: в сколько раз сама разработка сложнее, чем все эти разметки.
>>821495 Я уже полгода пишу логику для этой ебучей разметки. На юдасити шли нахуй все видео, если ты выбрал курс Android dev и сразу пиши приложения - так сэкономишь время курса.
>>821498 Спасибо за ответ. Вот же пидоры. Выставляют все так, как будто разработка под андроид это легко и даже твоя бабка сможет её осилить, начиная с разметки. А то я так потрачу овер 9000 часов на разметку, а потом окажется что я не тащу собственно саму логику. И нахуй мне теперь все эти сраные атрибуты.
Как вытащить данные из базы данных? То есть у меня есть база данных, в которой есть какой-то текст. Как мне его вывести, например, в TextView? Подскажите, какие методы используются, чтобы это сделать. Дальше уже буду искать туториалы, да на stackoverflow смотреть.
Прохожу курс от "Android Development for Beginners". Господи какой-то же он классный. А ведущая девушка азиатской внешности такая милая. Невозможно оторваться от курса. Только что по клику кнопки изменил число на экране. Эйфория. Порой даже верится что получится в программисты.
>>821791 Если писал приложение всё это время, то одобряю. Я потратил сутки(отрываясь на еду и толчок) на написание Movie Base в другом курсе по андроиду от юдасити
>>821803 Да прям в 2 ночи проснулся, стукнуло в голову стать андроид разработчиком. Установил студию, открыл курсы на юдасити и пошло поехало. Надеюсь дойду до Movie Base как и ты и не застопорюсь с унылыми мыслями что программирование это тяжело и какой же я тупой.
>>821820 А, это ты. Тебе уже сказали как пилить рест морду. >>821814 Да, вначале всегда романтика. А потом говнозаказчики, говнодизайнеры и говноменеджеры всю романтику портят.
>>821821 1) Если у тебя простое приложение, то ContentProvider может быть избыточным 2) ORM и всякие Realm не нужны. Достаточно использовать лёгкую библиотеку, предоставляющую удобное API для SQLite. например, StorIO
>>814733 (OP) Анончики, как правильно нотифаить о завершении запроса из сервиса? Юзать евинтбас? А он придет потом, если приложение свернуто в этот момент, и я отписался в онстопе?
>>821896 >Достаточно использовать лёгкую библиотеку, предоставляющую удобное API для SQLite. например, StorIO >StorIO Cupboard наше все. Хули все так рекламируют этот сторИО?
Учил вот джаву, но что-то очень скучно, решил попробовать андроид, расскажите чем занимаетесь, сколько времени идет на обучение. Советы и ответы на ФАК приветствууются
>>822042 >расскажите чем занимаетесь Занимаемся разработкой мобильных приложений на андроид. >сколько времени идет на обучение Уже полтора года опыта, а все еще учусь. оп
>>822042 >расскажите чем занимаетесь Пердолимся с косяками системы и чужими косяками в процессе создаем свои, иногда пьем смузи с маффинами и чизкейками на митапах. >сколько времени идет на обучение Всегда учишься. Ну это вообще про программирование если конечно речь не про энтерпрайз.
Получил класный креш: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. at android.database.CursorWindow.<init>(CursorWindow.java:108) at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198) at android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:300) at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138) at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132) at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219) at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:258)
И это на строке: if (cursor != null && cursor.moveToFirst()) {... Чо мне с курсором то делать надо что бы такого не было?
>>822042 > сколько времени идет на обучение. 4 с половиной года учусь, например. До сих пор днище ибо работать не пробовал, а практика нерегулярная. Не будь таким, как я.
>>821781 Не слушай его, курс хорош, если ты с нуля. И делали гугловские разработчики. Там по соседству где-то курс по Гиту от двух тянок валяется, тебе тоже пригодится в будущем
Здравствуйте, это снова я с VK-приложением. >>819511
(Не спрашивайте, почему так долго пишу, был занят другими делами).
Так вот, допустим, я создаю новую Activity, чтобы, например, показать в ней информацию о чате. Как туда передать VKAccessToken?
Остальные данные худо-бедно передаются: Bundle chatData = new Bundle(); chatData.putIntArray("CHAT USERS", chosenChat.users); chatData.putString("CHAT TITLE", chosenChat.title);
Intent intent = new Intent(Activity.this, ChatActivity.class); intent.putExtra("CHAT DATA", chatData); startActivity(intent);
Но! VkAccessToken нельзя передать просто так. Его не разобрать на элементы и собрать заново, он не Serializable, и вообще какой-то мутный. В новой Activity заново проходить авторизацию, что ли?
>>822666 Хотел добавить, но Андроид студия перестала работать. Точнее эмулятор перестал работать. Вчера работал, сегодня включил пеку и эмулятор больше не запускается, жалуясь на отсутствие аппаратного ускорения в процессоре. Это пиздос, еще вчера все работало.
При клике на кнопку 3/2/1 очка в переменную currentState записываю 3 2 или 1. Потом на методе кнопки отмены: if (currentState == 1 || currentState == 2 || currentStat == 3) teamscore = teamscore - currentState; display(teamscore); Просто отнимаю у текущего количества очков, то, что было нажато.
Я понимаю что это может быть нубское и кривое и неправильное решение, но это единственное с чем я смог совладать.
Есть здесь такие, кто пользовал MaterialDrawer от mikepenz? Мне нужно запихнуть его во фрагмент, но в билдере есть метод только withActivity. Я могу привязать его к общей для фрагментов Activity, но как сделать, чтобы на одних он выдвигался, а на других - нет? Пока что лучшее что я придумал это closedrawer в onDrawerSlide, но это кривовато смотрится, да и в целом
Как поменять connection interval со стороны мастера для ble или это можно только сделать через реквест со стороны периферии? Необходимо выставить его как можно большим.
>>823204 А она и так не один раз работает, а сколько угодно. Переменные очков матчей - глобальные.
У меня тут другая проблема назрела. Иду дальше по курсе, пришло время делать чекбокс. Тут андроид студия мне выкидывает новый сюрприз. Вместо чекбокса в превью просто надпись Checkbox серая. Превью еще и ошибку выдаёт.
Кто-нибудь сталкивался? Есть не сложно проверьте как вас, может они поломали чекбоксы?
>>823402 Ну такое... Удобность зависит от времени суток. Сейчас ночью да, удобно. >>823430 Че за футаба, кидай скрин/линк.
Иду дальше по курсу. Ведущая попросила добавить функционал учета сливок и шоколада, взял и добавил, без задней мысли. Сейчас буду смотреть как она это сделала.
>>823425 > Твоя белая тема вырвиглазная. Еще и на дваче небось дефолтная тема вместо Neutron. Лол, так ведь это нейтрон — вырвиглазная параша, тогда как фотон очень выглядит очень солидно и стильно. Кстати, тоже предпочитаю светлую тему в AS. Не понимаю вашего спора, кто-то любит светлые темы, кто-то тёмные, так что пусть пользуется тем, что нравится.
>>823657 Серо-оранжевый фотон выглядит как хуита для школьников-"экстремалов" и прочей ниферской нечисти из середины нулевых в патрулях и обосранных джинсах с мотней до пола. футаба-демиург
>>823000 В активити создай поле куда ты можешь запихнуть текущий открытый фрагмент и делай проверку при открытии дровера, мол тот ли этот фрагмент для которого дровера надо открывать.
Хелп. Есть код с ViewPager, 3 фрагмента для него и лайаута. Когда добавляю 2 фрагмента, всё отлично перелистывается и работает, а когда пытаюсь добавить третий всё крашиться. Что делать? Вот код MainActivity: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
private class CustomAdapter extends FragmentPagerAdapter {
private String fragments [] = {"1","2"};
public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) { super(supportFragmentManager); }
@Override public Fragment getItem(int position) { switch (position){ case 0: return new Fragment1(); case 1: return new Fragment3(); case 3: return new Fragment2();
default: return null; } }
@Override public int getCount() { return fragments.length; }
В универе учили Си, сейчас хочу вкатиться в Джаву. Какую книгу посоветуете, чтобы именно не плотно стоящий на ногах студент первого курса (уже получается второго) со знаниями Си мог вкатиться в джаву и затем в андроид? Философия Джава идеально подходит?
Посмотри на этот код. Этот код я взял из реального проекта. Из игры. Это код отвечающий за парсинг файлика .osz - местный формат карт в игре. 700 строк кода, просто что бы запарсить 1 жалкий файлик. 1400 строк кода gamedata.java
А теперь после просмотра этого когда, спроси себя, сможешь ли ты совладать с этим?
1. У меня есть активити с чекбоксами и прочей парашей, обычный круд который сохраняет в бд. Можно ли как-то легко стилизировать его в стиле настроек, чтобы вместо чекбоксов была кнопка которая ездит влево-вправа (как эта параша вообще называется?), дропдаун лист тоже как в настройках стандартных приложений. 2. Чтобы взять ширину/высоту вложенного элемента уже после всей обработки я делаю так: pizdaView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int width = pizdaView.getWidth(); pizda.fuck(new Hui(width)); } }); Это норма и так все делают? Выглядит довольно костыльно.
>>825020 > которая ездит влево-вправа https://developer.android.com/reference/android/widget/Switch.html > и так все делают Я делаю через pizdaView.post { pizdaView.getWidth() }, но никто не запрещает вручную вызвать measure с нужными параметрами и посмотреть. Хоть в некоторых случаях у меня не получается так высчитать
Неясного о Fuchsia остается еще много. Главный вопрос все же остается прежним — в каких системах планируется использовать эту ОС? Ожидать, что она создана в качестве альтернативы Android OS не стоит, ведь для того, чтобы программный продукт, в особенности, операционная система стал успешным, нужно активное сообщество разработчиков, каталог приложений и т.п. Google вложил сотни миллионов долларов в Android и вряд ли собирается что-то поменять.
>>825322 Я ж не классы прошу сжимать, ясное дело что там прогвард, вообщем-то она таки и сжимает, но на фоне ресурсов это хуйня, пару тысяч методов удалится, но это сотни килобайтов. Я про ассеты и ресурсы картинок. >>825342 >но мне лень искать Ну лан.
>>825384 Но мне обещают 20%... А не вытяну, значит плагин плохой, лол. Поиграюсь с библиотеками посмотрим чо как, мне ведь в принципе ассеты один раз сжать.
>>814733 (OP) Аноны, какие шансы устроиться джуном на ведре? Знаю что мобильная разработка сейчас пользуется огромным спросом, но все же? Какие требования к джунам?
>>814733 (OP) Аноны, если я аттачу/детачу вью к пресентуру в онкриейте/ондестрое, и эта вью ретаин фрагмент, то не будет же ничего течь? Пресенет соответсвенно находится в ретеин фрагменте.
sup подскажите, аноны могу ли я сделать в RecyclerViewAdapter кастомизированый первый айтем списка? типо мне надо что бы первый айтем отображался с картинкой и текстом, а следующие обычные айтемы только текст это надо в onBindViewHolder напиать что то типо if(position =0){} да?
>>826317 Переопределяешь getItemViewType, на нулевой итем возвращаешь какую-то константу, а на остальные - другую константу. В onCreateViewholder ты будешь получать viewType, в onBind ты можешь его получить через getItemViewType(position), но лучше конечно отдавать работу самому холдеру по байндингу данных.
Вкатываюсь с проблемкой. Решение понадобится где-то через неделю, а может и позже, поэтому пишу сюда, а не гуглю и курю документацию, как белый человек.
Есть одно приложение и в нём есть платная услуга. Основная его функциональность обеспечивается сервером, платная услуга даёт дополнительную функциональность. Итак, вопрос: как можно на серверной стороне проверить, купил ли человек эту услугу? Можно ли как-нибудь спросить подтверждение с сервера гугла?
>>826589 А ты не пробовал почитать документацию по in-app billing'у гугла? Они вообщем-то другую неохотно пропустят, если пропустят вообще. А в той конечно можно проверить наличие конкретной покупки, вот только ломается всякими лакипатчерами и прочей шляпой. Вообще у любой нормальной pay-системы есть возможность проверить перевода денег на счет, а на своем серваке после перевода бабоса записать транзакцию.
Котаны скажите плиз. Я сам ее-макака. Хочу использовать привычные методики.
Могу ли я в Андроиде: 1. Создать службу стартующую при запуске приложения. 2. Служба должна быть синглтоном. 3. В коде в активити с помощью депенденси инжекшен получать доступ к методам синглтоновской службы.
>>826965 Или вместо синглтона должен стартовать некий пул из экземпляров сервиса. А при депенденси инжекшене должен выбираться экземпляр из пула и после возвращаться в пул обратно
>>826979 Хайп сходит, перспектив никаких. Рынок перенасыщён, разработка происходит на уровне пхп макакинга. Лет 5 назад можно было вкатиться, сейчас просто забей.
>>826971 >>826966 >>826965 Блять, о чем ты? Иди реализуй AbstractSingletonProxyFactoryBean. > Создать службу стартующую при запуске приложения > Служба должна быть синглтоном Что ты вкладываешь в понятие служба. Можно запустить сервис как компонент приложения, можно просто хуякнуть в onCreate создание синглтона. > В коде в активити с помощью депенденси инжекшен получать доступ к методам синглтоновской службы Тогда только в виде обычного синглтона, DI есть, берешь и без задней мысли инжектишь. @Provides @Singlton, хуяк хуяк и в гуглплей.
>>826991 > Сейчас довольно популярна связка вр шлема + смартфон Популярна где? Этим занимаются полторы студии и 3 калеки. Работу чтобы делать именно вр ты не найдешь.
>>827017 >Этим занимаются полторы студии и 3 калеки.
Самсунг, хуавей, даже сам гугл выходит на рынок со своим шлемом и платформой, а значит появится единый стандарт для запиливания приложух под вр, инструментарий удобный и тд.
>>827031 Спасибо, глупый вопрос, но вот если андроид работает на джаве нативной, как он запускает с шарп код, это все как-то оборачивается в джаву перед загрузкой в гугл маркет?
У меня есть custom view, метод onDraw вызывает тяжеловатые вычисления. Есть ли какой-то изкоробочный метод чтобы инвалидировать view, и делать вычисления только по необходимости? Или самому добавить переменную и тупо чекаеть её в onDraw?
>>827057 Тяжеловесные вычисления какой природы? Если их можно один раз подсчитать, а потом использовать. А подсчитывать скорее всего нужно в onLayout/onMeasure. Сделать свой сеттер, который при смене параметра вызывает invalidate.
>>827060 Обработка возможных пересечений/коллизий объектов (от наличия которых зависит как их рисовать). Если пользователь подвигает объекты внутри, тогда надо перерисовывать и пересчитывать, однако это не каждый onDraw происходит. >Сделать свой сеттер, который при смене параметра вызывает invalidate не понел
аноны, нид хелп есть список ReyclerView и адаптер кастомный при нажатии на айтем списка должно открываться новое активити но почему то когда происходит клик, то в моем листе, из которого я достаю данные обнаруживается, что он пустой вот код адаптера - http://pastebin.com/VUQGmXc9 и мэйн активити - http://pastebin.com/iWPe6nbM
>>827086 Вообще похуй, по-видимому андроид достаточно умён сам по себе чтобы не вызывать onDraw постоянно, он это делает только когда я трогаю соответствующую вьюху. Это чтобы его наоборот заставить перерисовывать надо вызывать invalidate.
Как вы делаете такую чтуку? При страте активити или фрагмента надо показать анимацию появления чего то, как это делать по правильному? В он старте, через хендлер или ещё есть какие то способы?
>>827324 Так это не курс, а программа целая и первый курс как раз тот, который я скинул, ну короче норм. Нет к сожалению уже не студент и еще не студент.
>>814733 (OP) Такой вопрос, аноны. Курсы от гикбрейнз хуйня или стоящая штука? интересует именно мобайл разработчик. Напрягает долгость изучения - 11 мес, это чет долго
>>827402 Так-то оно так, но набирают они там огромное количество народа и много внимания они вряд ли уделят каждому, проще на двач код залить, авось кто и посмотрит. Я сам с 0 вкатываюсь (только си знаю и питон). Сначала думаю джаву выучить по Эккелю, а потом брать доки и курс вот этот >>827324. Ну дело твое.
>>827492 Я тебе повторяю, что тебе делать в программировании? Если ты не можешь в САМОСТОЯТЕЛЬНОСТЬ, то просто забей, это не твоё. >саппорт Няньку он блять хочет, охуеть вообще. Тебе на торентах лекции дали, домашку дали. Ебись дальше сам, какой нахуй кодревью, поехавший. Для особо одаренных, в начале следующей лекции полтора часа разбирают домашки всех студентов, сможешь посмотреть как вообще нормальные люди кодят. Но лучше забей. И купи курс для лохов за 70к
>>827621 Да я про муриканский курс, лучше его бери, а если не знаешь ангельский, то начни с этого, много времени потом сэкономишь, так как будешь читать свежайшие доки, а не переводы.
аноны, нид хелп есть список ReyclerView и адаптер кастомный при нажатии на айтем списка должно открываться новое активити но почему то когда происходит клик, то в моем листе, из которого я достаю данные обнаруживается, что он пустой вот код адаптера - http://pastebin.com/VUQGmXc9 и мэйн активити - http://pastebin.com/iWPe6nbM
Здравствуйте, как многие знают, Google готовит замену Android, новая ОС будет называется - Fuchsia. Но проблема в другом, недавно(3 дня назад) я начал изучать разработку ПО на Android, и после прочтения данной новости у меня возник вопрос: "А стоит ли продолжать?", раньше я возился над С++(остановился на классах) и с увеличением востребовательности разработчиков мобильного софта решил на время заняться данной сферой, дабы заработать. Вообщем я уже запутался, и решил спросить совет у опытных программистов.
>>828054 Неясного о Fuchsia остается еще много. Главный вопрос все же остается прежним — в каких системах планируется использовать эту ОС? Ожидать, что она создана в качестве альтернативы Android OS не стоит, ведь для того, чтобы программный продукт, в особенности, операционная система стал успешным, нужно активное сообщество разработчиков, каталог приложений и т.п. Google вложил сотни миллионов долларов в Android и вряд ли собирается что-то поменять.
>>814733 (OP) Аноны, как сделать, чтобы если не открыта нужная активити, то показать нотификейшн, иначе получить данные в этой активити? Щас показываю нотификейшн и бросаю бродкаст, когда перехватываю его, то удаляю нотификеёшн, но в таком случае на пол секунды становиться видно иконку в статус баре
Если хочешь стопроцентно рабочий вариант, то я предлагаю тебе записывать текущую активити в какую-нибудь переменную твоего Application'а или в SharedPreferences.
>>828169 > Если хочешь стопроцентно рабочий вариант, то я предлагаю тебе записывать текущую активити в какую-нибудь переменную твоего Application'а или в SharedPreferences.
>>828176 И в чем же говнокод? Это стопроцентно работает для его задачи, в отличии от туманных игрулек с GET_TASK, который диприкейтед уже 4 версии как.
>>828146 Сервис, который отображает уведомление, поддерживает биндинг. К нему коннектишь активити и через биндер инкрементируешь счётчик подключений. Если счётчик на нуле — показывай уведомление. Несколько громозкий вариант, но надежный и не говнокод.
Сап, есть активити с бэкграундом в котором фрагменты. Этот фон ложиться поверх фрагментов и в итоге видно один фон. Что сделать, чтобы изображения в фрагментах ложились поверх фона?
Андруаны, кто как решает проблему с медлительностью АС? Или терпеть приходится? Перекатил свой одноядерный днищебук на х64убунту, всё быстрее чем на винде кроме иде: 0~30с - мигает иконка 30с~1м - заставка ...~1:40 - появилось окно ...~2:40 - появился редактор ...~3:30 - догрузились остальные окна ...~5:15 - закончились синтаксический анализ и постройка градла Градл настроил работать в демоне, апп запускается чутка быстрее, зависит от ситуации, запускаю на риал устройстве. Сейчас еще попробую режим энергосбережения. Кстати, почему синт анализ запускается когда нипопадя, т.е. даже после каждого отступа?
>>814733 (OP) Анончики, кто юзвет StorIO? Мне надо положить в бд два разных объекта, т.е. сделавть два put'a с разными классами, но надо чтобы они были в транзакции. Это делается через lowlevel? Т.е. например:
lowlevel().beginTransaction();
storIOSQLite.put().object(firstObject)...//First class storIOSQLite.put().object(secondObject)...//Second class
>>828800 Сколько оперативки? Если 8ГБ и больше, можешь в настройках -Xms512m -Xmx1024m прописать. Так я решал проблему на макбук эйре с 8 гигами, на десктопе с 16 пока не заметил проблем.
Алсо, первый месяц на новой работе прошел довольно потно.
Предыдущий тред тут:
https://2ch.hk/pr/res/801015.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.
Привет клиент-серверка.
Пишите в треде что добавить