структура android приложения kotlin
Как разработать свое первое приложение для Android на Kotlin
Android становится одной из самых популярных операционных систем в эпоху мобильной разработки. ОС дает разработчикам быстрый выход на рынок (TTM), платформу с открытым исходным кодом, которая может адаптироваться к меняющимся бизнес-требованиям, и возможность развертывания на нескольких платформах.
Это делает Android одним из лучших решений для создания приложений с расширенными функциями.
Приложения для Android написаны на Java или Kotlin. Kotlin становится предпочтительным вариантом для разработчиков приложений, и Google даже объявил, что Kotlin является предпочтительным языком. Сегодня мы расскажем вам, как создать приложение для Android с помощью Kotlin.
История развития Android
С момента своего создания в 2003 году Android стала одной из крупнейших в мире операционных систем для разработки мобильных приложений. Изначально стартап, который изначально намеревался улучшить цифровые камеры, Android переключился на мобильные телефоны в 2004 году, а в следующем году был приобретен Google.
Android 1.0 дебютировал в 2008 году в США. С тех пор было выпущено 15 выпусков мобильных телефонов, использующих эту операционную систему, причем последний анонсированный выпуск Android 11 состоялся в феврале 2020 года.
Из этого краткого урока истории о том, как появился Android, мы готовы установить нашу интегрированную среду разработки (IDE): Android Studio.
Что такое Android Studio и SDK?
Android Studio, созданная специально для Google, призвана максимально упростить разработку приложений для Android. Согласно документам разработчика Android,
«Android Studio — это официальная среда IDE для разработки приложений Android на основе IntelliJ IDEA».
С Android Studio вы можете тестировать приложения либо на эмуляторе, либо прямо на устройстве. Для разработки под Android используются несколько языков. Мы обсудим это более подробно позже.
Android Studio поставляется с Android Software Development Kit (SDK), который является важной частью разработки Android. Он включает файлы и библиотеки для создания приложений Android, а также такие инструменты, как диспетчер виртуальных устройств и мост ADB.
Чтобы загрузить Android Studio, перейдите на официальный сайт и следуйте инструкциям, чтобы начать работу в вашей конкретной операционной системе (Windows / Mac / Linux).
Если вы планируете использовать виртуальное устройство Android вместо физического устройства, обратите внимание на дополнительные требования, необходимые для запуска эмулятора.
Особенности Android Studio
В Android Studio есть несколько функций, которые делают его достойной IDE для вашего следующего проекта:
Технологии, используемые в разработке под Android
Теперь, когда мы рассмотрели наиболее интересные части Android Studio, давайте узнаем о некоторых языках программирования, с которыми вы столкнетесь как разработчик Android.
Чтобы понять разницу между Kotlin и Java, сравните этот MainActivity.javaфайл и MainActivity.ktфайл Android.
Теперь, когда у нас есть представление о технологиях, которые используются при создании приложения для Android, давайте соберем все это вместе и создадим базовое приложение с использованием Kotlin!
Как настроить ваше первое приложение
Чтобы создать наше первое приложение для Android, мы хотим убедиться, что у вас установлена Android Studio. Перейдите по ссылке в разделе «Установка Android Studio», чтобы настроить среду, если вы еще этого не сделали.
Настройки в Android Studio
Откройте Android Studio. Вам будет предложено несколько вариантов. Мы ищем для создания нового проекта. Когда вы нажмете на эту опцию, вам будет предложено выбрать свой проект.
Есть всевозможные шаблоны экранов, из которых вы можете выбирать. На данный момент выберите «Основные действия» на вкладке «Телефон и планшет».
Затем вы будете перенаправлены на экран, на котором вам будет предложено назвать свое приложение, где его сохранить, и должно ли оно быть приложением с поддержкой Instant App.
Важный! Обязательно выберите Kotlin в качестве своего языка. На данный момент по умолчанию используется Java.
Минимальный уровень API — это версия Android, для которой вы хотите разрабатывать. Android предоставляет удобную всплывающую подсказку, которая сообщает вам, на каком проценте устройств будет работать выбранный вами API. Ваши потребности могут отличаться, но рекомендуется использовать API 23: Android 6.0 (Marshmallow).
Щелкните Готово. На этом этапе создание проекта займет около минуты. Давайте продолжим и создадим виртуальное устройство Android. Чтобы мы могли предварительно просмотреть наше приложение в эмуляторе Android.
Настройте виртуальное устройство для тестирования вашего приложения
Виртуальное устройство Android (AVD) — это набор характеристик, которые определяют тип устройства, которое вы хотите эмулировать в эмуляторе Android. В Android Studio есть AVD Manager, который помогает нам создавать виртуальные устройства и управлять ими.
Это означает, что в Android Studio есть место, где мы можем создавать наши виртуальные телефоны, планшеты и многое другое, чтобы мы могли тестировать на них наши приложения.
Теперь вы готовы эмулировать Android-устройство в Android-эмуляторе! Нажмите кнопку «Воспроизвести» на панели инструментов, чтобы запустить приложение. В шаблоне «Basic Activity» он поставляется с предварительно запеченной базовой панелью навигации, кнопкой действия и TextView с надписью «Hello, World!».
Урок 2. Kotlin. Создание проекта в Android Studio и запуск приложения на андроид-устройстве
Создание проекта на Kotlin в Android Studio
В этом уроке мы создадим новый проект для первого приложения и запустим это приложение на андроид-устройстве.
Что вы узнаете
Создание нового проекта
После этих шагов, Android Studio:
Окно Android Studio должно выглядеть примерно так:
Скриншот 1. Интерфейс Android Studio
Рассмотрим интерфейс Android Studio
Главное окно можно упорядочить, чтобы предоставить больше места на экране, скрывая или перемещая панели инструментов и окна инструментов. Для доступа к большинству функций IDE также можно использовать сочетания клавиш.
В любой момент можно выполнить поиск по исходному коду, базам данных, командам, элементам пользовательского интерфейса и т. д., дважды нажав клавишу Shift или щелкнув увеличительное стекло в верхнем правом углу окна Android Studio. Это может быть очень полезно, если, например, вы пытаетесь найти конкретную команду IDE, которую вы забыли, как запустить.
Окно структуры проекта
Скриншот 2. Окно структуры проекта Android Studio
Изучение структуры и макета проекта
Можно посмотреть иерархию файлов приложения несколькими способами.
В виде отображения Project > Project вы увидите полную структуру папок проекта, как она выглядит на диске. Здесь много файлов и папок и новичку здесь можно запутаться. Главное, на что следует обратить внимание: проект имеет модульную структуру и основной модуль нашего приложения – app. Project» width=»1168″ height=»1079″ srcset=»https://www.fandroid.info/wp-content/uploads/2017/11/Okno-struktury-proekta-Android-Studio-v-vide-Project-Project.png 1168w, https://www.fandroid.info/wp-content/uploads/2017/11/Okno-struktury-proekta-Android-Studio-v-vide-Project-Project-768×709.png 768w» sizes=»(max-width: 1168px) 100vw, 1168px» />
Скриншот 3. Окно структуры проекта Android Studio в виде Project> Project
Если раскрыть папку app, мы увидим такие папки:
Также в папке модуля app имеется файл системы сборки build.gradle, мы рассмотрим его позже.
Если переключиться на вид проекта Project > Android, вы увидите только папку модуля app с упрощенной структурой проекта. Это представление удобнее, поскольку здесь отфильтрованы только те файлы, с которыми мы непосредственно будем работать. Но следует помнить, что в таком виде структура папок проекта не соответствует той, что хранится на диске. Например, вы не найдете на диске в папке проекта папку manifests. А в дереве папок в таком режиме не отображаются папки src и main.
Скриншот 4. Окно структуры проекта Android Studio в виде Project>Android
В виде Project > Android вы увидите в папке app такие папки: manifests, java, и res.
com.example.android.myfirstapp (androidTest): эта папка для размещения инструментальных тестов.
com.example.android.myfirstapp (test): эта папка для размещения модульных тестов.
Подробнее о тестах вы можете узнать из Курса по архитектуре андроид-приложений.
Также в окне структуры проекта есть папка Gradle Scripts. Раскройте ее. В начале списка есть два файла с одинаковыми именами build.gradle. Это файлы сборки для системы Gradle, которая используется для компиляции, построения и упаковки приложений и библиотек. В скобках после имени файлов указана принадлежность файла модулю App или всему проекту. Файл сборки уровня проекта содержит настройки для всего проекта, а файл сборки уровня модуля содержит настройки для модуля. Чаще всего мы будем работать именно с файлом сборки уровня модуля. Он содержит такие основные секции, как:
Запуск android-приложения
Наиболее очевидный способ проверить работу приложения в процессе разработки – установить и запустить его на андроид-устройстве.
Для запуска приложения из среды разработки Android Studio мы можем использовать 2 способа:
Оба этих способа имеют свои преимущества и недостатки, и какой использовать, выбирать вам. Для начинающего разработчика подойдет любой способ.
Что такое андроид-смартфон, вы наверняка уже знаете, раз заинтересовались темой разработки приложений. А что такое эмулятор Android? Это запуск системы Android на ПК в отдельной виртуальной машине.
Существует много эмуляторов Android, например BlueStacks, Droid4X, Nox APP Player, Genymotion, и другие. Большинство из них разработаны для игр и не очень подходят для тестирования приложений, кроме Genymotion.
В Android Studio есть собственный эмулятор, который может запускать образы виртуальных устройств с различными характеристиками, таких как смартфоны Nexus и Pixel, а также планшеты наиболее распространенных типов.
Создание виртуального android-устройства (эмулятора)
В Android Studio есть утилита Android Virtual Device (AVD) manager для создания виртуального устройства (также известного как эмулятор), моделирующего конфигурацию определенного типа андроид-устройства.
Первым шагом является создание конфигурации, описывающей виртуальное устройство.
Возможные проблемы
Если у вас на компьютере установлена операционная система Windows, а процессор AMD, то скорее всего вы увидите такое предупреждение в окне выбора оборудования для виртуального устройства. Дело в том, что образы виртуальных устройств с типом x86 не работают на связке Windows + AMD. Причем на связке Linux + AMD таких проблем нет. Процессоры Intel поддерживают образы x86 на любой операционной системе. Для Windows + AMD вы можете использовать образы типа arm, но они гораздо более медленные. Выходом будет использование реального устройства – андроид-смартфона или планшета, подключенного к компьютеру.
Другой распространенной проблемой является отключенная виртуализация процессора. Включить виртуализацию можно в биосе, в интернете можно найти много инструкций, как это делается.
Также нужно в SDK Manager на вкладке SDK Tools установить Intel x86 Emulator Accelerator для лучшей производительности и скорости работы. Только для процессоров Intel.
Если в окне выбора системного образа нет активных образов для установки, загрузите образ необходимой версии Android в SDK менеджере. Откройте окно SDK Manager и на вкладке SDK Platforms справа внизу установите флаг Show Package Details для отображения всех компонентов платформы (см. Скриншот 5). Отметьте для загрузки нужный файл System Image. После загрузки выбранный образ будет доступен в окне AVD Manager.
Скриншот 5. Установите флаг Show Package Details для отображения всех компонентов платформы
Запуск приложения на эмуляторе
Эмулятор запускается и загружается как физическое устройство. В зависимости от скорости компьютера это может занять некоторое время. Можно посмотреть в маленькую горизонтальную строку состояния в самом низу окна Android Studio, чтобы увидеть ход выполнения.
После того как приложение будет построено и эмулятор будет готов, среда Android Studio установит приложение в эмулятор и запустит его. Вы увидите ваше приложение, как показано на следующем снимке экрана.
Замечание: рекомендуется запускать эмулятор в начале сеанса. Не закрывайте эмулятор до тех пор, пока не будет выполнена проверка приложения, чтобы не дожидаться повторной загрузки эмулятора. Кроме того, не следует одновременно запускать несколько эмуляторов, чтобы уменьшить использование памяти.
Запуск приложения на реальном андроид-устройстве
Запуск приложения на устройстве
Примечание: На Android 4.2 и новее, пункт меню Для разработчиков по умолчанию скрыт. Чтобы сделать его доступным, перейдите к Настройки > О телефоне и нажмите Номер сборки семь раз. Вернитесь к предыдущему экрану, чтобы найти пункт меню Для разработчиков.
Чтобы запустить приложение из Android Studio:
Откройте один из файлов вашего проекта и нажмите Run app на панели инструментов. Или нажмите комбинацию клавиш Shift+F10.
Откроется окно выбора подключенного реального устройства или эмулятора. Выберите ваше устройство и нажмите OK.
Android Studio устанавливает приложение на выбранное устройство и запускает его.
Это простое приложение отображает строку «Hello World» на экране виртуального или физического устройства Android.
Note: Если на устройстве установлена платформа Android, которая не установлена в среде Android Studio, может быть выведено сообщение с запросом о необходимости установки необходимой платформы. Нажмите Install and Continue, затем кнопку Finish по окончании установки.
Неполадки
В случае неполадок при запуске приложения в нижней части окна Android Studio открывается окно Logcat, где можно увидеть текст ошибки и возможное решение проблемы. Если вам непонятно, о чем там написано, попробуйте загуглить часть текста ошибки. Очень вероятно, что вы найдете в результатах поиска решение вашей проблемы на форумах для программистов.
Если Приложение не запускается, закройте среду Android Studio и перезапустите ее.
Если среда разработки Android Studio не распознает устройство, попробуйте выполнить следующие действия.
Если компьютер по-прежнему не находит устройство или объявляет его «неавторизованным»:
Возможно, потребуется установить соответствующий драйвер USB для устройства. См. Using Hardware Devices documentation.
Все ссылки на дополнительные материалы по теме есть в текстовой версии урока на сайте fandroid.info. Вопросы задавайте в комментариях к уроку на сайте.
Надеемся, у вас все получилось и вы запустили приложение на устройстве. А на следующем уроке мы более подробно разберемся в приложении и попробуем изменить его. Всем добра!
Пишем MVP приложение на Kotlin под Android
Разработка приложений на Kotlin под Android набирает популярность среди разработчиков, однако статей в русскоязычном сегменте Интернета довольно мало. Я решил немного подправить ситуацию, и написать туториал по разработке приложения на Kotlin. Мы напишем полноценное приложение с использованием всех трендовых библиотек (кроме RxJava) в мире Android-разработки. В конце у нас должно получиться расширяемое и легко тестируемое приложение (сами тесты мы писать не будем).
Внимание! В статье описывается создание приложения версии 1.0. Текущий код в репозитории может отличаться от описываемого в статье.
Наверное, некоторые из вас знают, что помимо языка программирования Kotlin JetBrains также разрабатывает библиотеку Anko, для создания UI приложения, в качестве замены обычным XML-файлам. Мы не будем использовать его в нашем проекте, дабы не ставить в затруднительное положение людей не знакомых с Anko.
Настройка Android Studio
Для написания приложений на языке Kotlin, Android Studio нужен специальный плагин. Инструкцию по установке плагина можно найти здесь. Также не забудьте отключить функцию «Instant Run» в настройках Android Studio, т. к. на данный момент она не поддерживается плагином Kotlin.
Для корректной работы генерации кода нужно использовать версию плагина не ниже 1.0.1. Я использовал версию Kotlin 1.0.2 EAP. Вот так выглядит файл build.gradle приложения в моем проекте:
Что будем писать?
Итак, для начала нам нужно определиться что же мы будем писать? Недолго думая я остановился на приложении-заметках. Название тоже придумалось легко — Notelin. Приложение очень простое и состоит из двух экранов:
— Главный экран — содержит в себе список с заметками
— Экран заметки — здесь можно смотреть/редактировать содержание выбранной заметки
Требования к приложению небольшие:
— Добавление/просмотр/удаление заметки
— Просмотр информации о заметке
— Сортировка заметок по заголовку и по дате
— Поиск по заголовкам заметок
Используемые библиотеки
Для работы с базой данных я буду использовать библиотеку Android Active. Урок по работе с ней можно найти по этой ссылке. Для реализации Depency Injection была использована библиотека Dagger 2. На Хабре есть много статей по работе с ней. Основой всего приложения будет библиотека Moxy. С ее помощью мы реализуем паттерн MVP в нашем проекте. Она полностью решает проблемы жизненного цикла, благодаря чему вы можете не переживать о пересоздании компонентов вашего приложения. Также мы воспользуемся набором расширений для языка Kotlin в Android — KAndroid. Про остальные библиотеки я буду рассказывать по ходу дела.
Ниже приведен список зависимостей проекта:
А вот так выглядит список зависимостей приложения:
Обратите внимание, что вместо apt я использую kapt. Это плагин для Gradle, позволяющий аннотировать Kotlin-элементы.
Структура приложения
Вот так выглядит структура нашего проекта в конечном варианте:
Создаем Model
У заметок будет четыре поля:
Реализуем все это в коде:
По этой модели библиотекой ActiveAndroid будет создана БД, в которой будут храниться наши заметки. Если вы заметили, у нас есть два конструктора: пустой и с параметрами. Первый конструктор будем использовать мы, а второй — ActiveAndroid. Наша модель наследуется от класса Model, благодаря чему мы можем сохранять и удалять наши заметки просто вызывая методы save() и delete(), например:
Но прежде чем использовать нашу модель, нам нужно прописать кое-какие мета-данные в Manifest-файле:
Думаю, все понятно без комментариев. Осталось унаследовать класс Application от com.activeandroid.app.Application:
Чтобы приложение было менее зависимо от БД я создал обертку NoteDao над нашей моделью, в которой будут происходить все операции по созданию, сохранению, обновлению и удалению заметок:
Наверное, вы заметили, что для создания объектов мы не использовали ключевое слово new — это отличие Kotlin от Java.
Экран с заметками
Также является главным экраном приложения. На нем пользователь может добавить/удалить заметку, просмотреть информацию о заметке, отсортировать их по дате или названию, а также произвести поиск по заголовкам.
Создаем MainView и MainPresenter
Теперь нам нужно перевести все это в код. Для начала создадим интерфейс нашей View:
Далее мы реализуем созданный интерфейс в нашей активити:
Одной из особенностей Kotlin, является то, что наследование и реализация интерфейсов указывается через двоеточие после имени класса. Также не имеет разницы идет название родительского класса перед интерфейсами, после или даже между ними, главное, чтобы класс в списке был один. Т. е. запись выше могла бы выглядеть так:
Если же вы попытаетесь добавить через запятую название еще одного класса, то IDE выдаст ошибку и подчеркнет красной линией название класса, который идет вторым.
Пока оставим методы пустыми. Как видите, активити наследуется от MvpAppCompatActivity. Это нужно для того, чтобы активити могла восстанавливать состояние при повороте экрана.
Создадим класс презентер:
Презентер также наследуется от MvpPresenter, которому мы указываем с какой View мы будем работать.Осталось инжектировать нашу модель в презентер. Для этого мы создаем модуль — поставщика NoteDao:
Создадим Component для инжектирования презентера:
Теперь нам нужно создать статический экземпляр класса AppComponent в классе Application:
Теперь мы можем инжектировать нашу модель в презентере:
Для взаимодействия MainView и MainPresenter нам нужно создать переменную в MainActivity:
Плагин Moxy сам привяжет View к фрагменту и произведет другие необходимые действия.
Создадим разметку экрана со списком и плавающей кнопкой. Файл activity_main.xml:
Для реализации летающей кнопки я использовал библиотеку FloatingActionButton. Google уже добавили FAB в support-библиотеку, поэтому вы можете воспользоваться их решением.
Укажем нашей Activity, какой макет она должна показывать:
Далее нам нужно связать FAB и список, чтобы при прокручивании списка вверх кнопка исчезала:
Нам не нужно писать порядком надоевший findViewById, нужно лишь прописать одну строчку в блоке с import’ами:
Как видите, последний пакет совпадает с названием нашего xml-файла. IDE автоматически инициализирует свойства (property) наших View и их имена совпадают с ID, которые мы указали в разметке.
Давайте реализуем загрузку заметок из БД. Заметки нужно загружать только один раз и использовать их в последующем. В этом нам поможет метод onFirstViewAttach класса MvpPresenter, который вызывается единожды при первой привязке View к презентеру. Далее, сколько бы мы не крутили и вертели нашу Activity, данные будут закешированы в презентере.
Создадим адаптер для нашего списка:
В адаптере мы используем метод formatDate. Он служит для форматирования даты в строку:
Данный метод находится в файле DateUtils.kt и мы можем использовать как обычный статический метод. Отличие от статического метода здесь в том, что метод принадлежит не классу, а пакету и нам не нужно писать имя класса перед названием метода. В аннотации мы указываем название класса, через который мы будем обращаться к методу из Java. Например в Java дынный метод будет вызываться так:
В методе onNotesLoaded нашей Activity мы показываем наши заметки:
Если заметок нет, то мы показываем сообщение «Нет заметок» в TextView.
Насколько я знаю, для обработки клика по элементам RecycleView не существует «официального» OnItemClickListener. Поэтому мы воспользуемся своим решением:
В методе onCreate нашей Activity пишем:
Функция with позволяет не писать каждый раз имя переменной, а только лишь вызывать методы у объекта, который мы передали в нее. Обратите внимание, что для получения Activity я использовал не просто this, а this@MainActivity. Это связано с тем, что при использовании this в блоке with, возвращается объект, который мы передали в функцию with. При обычном клике по пункту мы переходим на Activity, где мы можем просмотреть текст нашей заметки. При долгом нажатии появляется контекстное меню. Если вы заметили, перед закрывающей скобкой я не написал слово return. Это не ошибка, а особенность языка Kotlin.
Вот что происходит при нажатии на пункт меню в презентере:
Мы еще не создали класс NoteActivity, поэтому компилятор будет выдавать ошибку. Для решения этой проблемы можно создать класс NoteActivity или вовсе закомментировать код внутри метода openNote. Запись NoteActivity::class.java аналогична NoteActivity.class в Java. Также заметьте, что мы обращаемся к списку не через метод get(position), а через квадратные скобки, как к обычному массиву.
При использовании MVP-библиотеки Moxy в своем приложении, нам нужно привыкать, что все действия с View, такие как показ/закрытие диалога и другие, должны проходить через презентер. Изначально это не очень привычно и неудобно, но пользы от этого гораздо больше, т. к. мы можем быть уверены, что при пересоздании Activity наше диалоговое окно никуда не пропадет.
Я не буду показывать код контекстного меню, удаления и показа информации о заметке т. к. статья получается очень большой. Но, думаю, общий смысл вы уловили. Также следует отметить, что метод hideNoteContextDialog у презентера должен вызываться даже при закрытии диалога через кнопку назад или при нажатии на область за границами диалога.
При нажатии на FAB должна создаваться новая заметка:
Для создания новой заметки мы вызываем у презентера функция openNewNote:
Метод openNewNote использует созданный нами ранее openNote, в который мы передаем Context и позицию заметки в списке.
Реализуем поиск по заметкам
Давайте добавим поиск по заметкам. Создайте в папке res/menu файл main.xml:
В MainActivity пишем:
При изменении текста в поле поиска мы передаем строку из поля в презентер, после чего показываем результаты в списке. На самом деле, у SearchView нет метода onQueryChange, его добавила библиотека KAndroid.
Реализуем поиск в презентере:
Обратите внимание, как красиво, в одну строчку мы реализовали поиск по списку с помощью метода filter и лямбд. В Java тот же функционал занял бы 6-7строк. Осталось отобразить результаты поиска:
Реализуем сортировку заметок
И последний этап в создании главного экрана, это сортировка заметок. Добавим в res/menu/main.xml следующие строки:
Теперь нам нужно обработать нажатие на пункты меню:
Оператор when является более функциональным аналогом switch-case в Java. Код сортировки в MainPresenter:
Экран с содержанием заметки
Теперь нам нужно создать экран с содержанием заметки. Здесь пользователь может просмотреть/отредактировать заголовок и текст заметки, сохранить или удалить ее, а также просмотреть информацию о заметке.
Создаем NoteView и NotePresenter
Экран содержит всего лишь три View:
-Заголовок
-Дата последнего изменения
-Текст заметки
А вот и сама разметка:
В начале статьи я мельком упомянул об Anko. Библиотека позволяет существенно сократить код, не теряя при этом в удобочитаемости. Вот так, например, выглядела бы наша разметка при использовании Anko:
Но не будем отвлекаться и приступим к написанию кода. Первым делом нам нужно создать View:
Имплементируем NoteView в NoteActivity:
В onCreate мы извлекаем id заметки, чтобы презентер достал заметку из БД и передал данные во View. Создадим презентер:
Не забудьте добавить в класс AppComponent строку:
Покажем нашу заметку:
Реализуем сохранение заметки
Для сохранения заметки нам нужно выбрать соответствующий пункт в меню. Создайте файл res/menu/note.xml:
Опять же, я не стал приводить код удаления и вывода информации о заметке. При просмотре исходного кода, вы можете заметить, что помимо идентификатора заметки я передал в NoteActivity позицию заметки в списке. Это нужно для того, чтобы при удалении заметки на экране просмотра заметки, она также удалялась из списка. Для реализации этого функционала я использовал EventBus. И опять, я не стал приводить код.
На этом все: заметки добавляются, редактируются и удаляются. Также мы можем осуществить поиск и сортировку заметок. Обязательно посмотрите полный исходный код, ссылку на который я привел в конце статьи, чтобы лучше понять как все устроено.
Благодарности
Конечно же, нельзя забывать о людях, которые помогли мне при написании статьи. Хотел бы выразить благодарность хабраюзерам Юрию Шмакову (@senneco) за помощь с его библиотекой Moxy и за помощь по другим вопросам. Также, хочу сказать спаcибо сотруднику JetBrains Роману Белову (@belovrv) за ревью статьи и за предоставленный код на Anko.
UPD: Еще хотел сказать спасибо Sirikid за EPIC COMMIT, благодаря которому я переделал внушительную часть кода с использованием фич Kotlin’а.
Заключение
Надеюсь, эта статья смогла убедить вас в том, что писать приложения на Kotlin не трудно, а может даже и легче, чем на Java. Конечно же, могут встречаться и баги, которые сотрудники JetBrains достаточно быстро фиксят. Если у вас появились какие-либо вопросы, вы можете задать их напрямую разработчикам на Slack-канале. Также вы можете почитать статьи о разработке на Kotlin здесь.