- ListActivity — создаём прокручиваемый список
- Список за пять минут
- Шаг первый
- Шаг второй
- Шаг третий
- Шаг четвёртый
- Шаг пятый
- Шаг шестой
- Обработка нажатий
- Долгое нажатие и удаление элемента списка
- Заключение
- Исходный код
- Своя разметка
- Переключаемся между двумя списками
- Путеводитель по бесплатным менеджерам задач для Android
- GTasks
- Tasks Free
- Tick Tick
- Business Tasks
- Any.do
- Todoist
- Wunderlist
- To Do Reminder
- Noodles
- Remember the Milk
ListActivity — создаём прокручиваемый список
Список за пять минут
Очень часто экран приложения состоит из обычного прокручиваемого списка. Например, это может быть список контактов, дни месяца, ассортимент товара, технические характеристики модели и так далее. Android позволяет создать такой список за пару минут.
В предыдущих примерах мы встречали в коде строчку public class HelloWorld extends Activity, что означало наследование от специального класса Activity или производных классов, например, AppCompatActivity. Существует ещё один специальный класс ListActivity, специально разработанный для списков.
Сейчас данный тип активности устарел, так как не слишком удобен для планшетов. Теперь предпочтительнее использовать ListFragment. Но в основе всё равно лежит компонент ListView и базовые приёмы работы не изменились. Изучив данный пример, вы без труда разберётесь и с другими формами отображения списков.
Шаг первый
Создадим новый стандартный проект. Мы знаем, что в проекте есть файл activity_main.xml, отвечающий за разметку элементов на экране. Класс ListActivity разработан таким образом, что на экране есть только прокручиваемый список и ему не нужна дополнительная разметка. Поэтому набираемся смелости, выбираем в папке res/layout файл activity_main.xml и удаляем его.
Шаг второй
Всё пропало! Теперь ничего не запустится! Don’t panic! Открываем java-файл и видим, что студия ругается на строчку setContentView(R.layout.activity_main);, что вполне объяснимо. Мы ведь только что сами удалили файл разметки. Ещё раз набираемся смелости и удаляем эту строчку, она там тоже больше не нужна.
Шаг третий
Теперь нужно поставить Android в известность, что мы собираемся использовать экран со списком, поэтому меняем в строчке public class ВашеНазваниеActivity extends AppCompatActivity слово AppCompatActivity (или Activity) на ListActivity. Если набирать вручную, то студия автоматически импортирует нужный класс.
В результате в секции import нашего файла появится новая строка. Там же мы увидим строку, которую можно безболезненно удалить:
Шаг четвёртый
Подготовительные работы закончены. Теперь пришло время подготовить данные для списка, чтобы отобразить их на экране. Создадим массив строк:
К слову сказать, вы можете создать массив строк в ресурсах, в этом случае вам будет проще редактировать список, не затрагивая код программы. Когда наберётесь опыта, то сами решите, какой вариант лучше.
Шаг пятый
А теперь начинается самое важное. У нас есть намерение создать экран со списком и сами слова для списка. Необходим некий посредник, который свяжет эти звенья в одно целое. Для подобных целей в Android существует понятие адаптера данных и его определение для работы с массивами строк выглядит так:
Адаптеру нужно от вас три вещи: явки, пароли, деньги , текущий контекст, идентификатор ресурса с разметкой для каждой строки, массив строк.
Мы можем ему предложить ListActivity в качестве текущего контекста (можно использовать ключевое слово this), готовый системный идентификатор ресурса и созданный массив строк. А выглядеть это будет так:
Обратите внимание на строчку android.R.layout.simple_list_item_1. В ней уже содержится необходимая разметка для отдельного элемента списка, которая состоит из одного компонента TextView. Если вас не устраивает системная разметка, то можете создать собственную разметку в xml-файле и подключить её. Об этом в следующий раз.
Шаг шестой
Осталось сделать заключительный штрих — подключить адаптер:
Запускаем проект и любуемся своим списком. Он прекрасно прокручивается и каждый пункт подсвечивается при нажатии.
Обработка нажатий
Но пока приложение никак не реагирует на наши нажатия. Исправим ситуацию. Нам нужно знать, на каком пункте списка осуществляется нажатие. У ListActivity есть специальный метод для таких случаев — onListItemClick(). Начинайте вводить первые символы названия метода и студия предложит вам подходящий вариант. Нажмите Enter на предложенном варианте и у вас появится заготовка.
У метода четыре параметра. Самым интересным является третий параметр position, который указывает на номер выбранного пункта списка.
Осталось только прописать код для события — давайте выведем всплывающее сообщение, которое будет содержать позицию выбранного элемента списка.
Отсчёт позиций идёт с нуля, поэтому я прибавляю единицу к номеру позиции, чтобы получить информацию в привычном виде.
Замурчательно. Но хочется узнать не номер выбранного пункта, а сам текст. У списка ListView есть специальный метод getItemAtPosition(position), возвращающий объект для заданной позиции. Перепишем код.
В данном случае мы используем первый параметр l, который отвечает за родительский компонент ListView. Возвращаемый объект нужно преобразовать в строку.
В тех методах, у которых нет в параметрах ссылки на ListView, мы можем получить доступ к списку через метод активности getListView().
Запускаем программу и начинаем щёлкать по любой позиции списка — мы получим соответствующее сообщение. Вы можете использовать свой код — вызывать новое окно, проигрывать музыку и т.д.
Долгое нажатие и удаление элемента списка
Расширим возможности списка и научимся обрабатывать долгие нажатия, а также удалять некоторые элементы списка.
Для долгого нажатия существует интерфейс OnItemLongClickListener с методом onItemLongClick(), возвращающим значение. Так как мы собираемся обрабатывать долгие нажатия, то строчку return false; необходимо заменить на return true;.
Добавляем интерфейс в активность, вручную вводя текст implements OnItem, студия предложит подсказку и поможет создать нужный метод для данного интерфейса.
Далее внесём небольшое изменение в адаптер данных. Сам по себе массив строк является неизменяемым, и чтобы мы могли удалять пункты из списка, необходимо сконвертировать его в специальный объект ArrayList , который является изменяемым, а уже новый объект отдадим адаптеру. Объявим новую переменную.
Подключаем к адаптеру.
Далее прописываем необходимый код для удаления выбранного пункта меню и запускаем программу. Прокручивая список, с удивлением замечаем, что среди кошачьих имён затесался какой-то сраный пёсик Бобик. Пробуем удалить его. Получилось! Теперь наш список выглядит правильно.
Метод remove() удаляет элемент из списочного массива, а метод notifyDataSetChanged() уведомляет список об изменении данных для обновления списка на экране.
На всякий случай ещё раз просмотрите список и если увидите чужеродное имя, то удалите его.
Удаление — весьма опасная операция, пользователь может по ошибке нажать на пункт списка. Лучшим решением было бы показать диалоговое окно с подтверждением операции. В последнее время весьма популярным стало использование специального типа уведомления внизу экрана с кнопкой «Отмена», например, готовый компонент SnackBar (о нём говорилось на одном из уроков).
Заключение
Поначалу эта статья может показаться вам сложной. Не отчаивайтесь, возьмите её как шаблон и на первых порах просто копируйте куски кода. Позже с практикой вы лучше разберётесь в работе со списком.
В данном материале вы познакомились с простым и быстрым способом создания списка на основе системных настроек. Но, если вам нужны более навороченные списки, то изучите статью про элемент управления ListView, а также статью Списки со значками.
Исходный код
Своя разметка
Когда в самом начале статьи я говорил, что для ListActivity не нужен шаблон activity_main.xml, то немножко лукавил. На самом деле вы можете подключить свой шаблон, но с одним условием — шаблон должен содержать элемент ListView с идентификатором @android:id/list.
Можно заново создать файл activity_main.xml, если вы его удалили, как вас просили, или файл с другим именем, например, activity_customlist.xml:
Я специально установил зелёный цвет для фона, чтобы вы поверили, что будет запускаться наш шаблон вместо системного, а TextView с системным идентификатором android:id/empty нужен для отображения текста, если список будет пустым. Осталось добавить строчку кода, который подключает шаблон:
Запустите проект и убедитесь, что загружается наш шаблон. Если вы зададите пустой массив, то вместо списка вы увидите TextView с текстом List is Empty.
Ещё раз напомню, что в стандартных списках отдельный его элемент представляет собой компонент TextView. Если вы хотите создать более сложную разметку с картинками, то вам надо изучить поближе ListView. Для этого на сайте есть отдельный раздел.
Переключаемся между двумя списками
Возможно, вам понадобится переходить из одного списка в другой. Например, первый список представляет собой месяцы, а второй — дни недели.
Мы создали два адаптера через массивы строк. Сначала используем первый адаптер. При выборе элемента списка через метод onListItemClick() подключаем другой адаптер. Чтобы изменения отразились на экране, необходимо вызвать метод notifyDataSetChanged().
Источник
Путеводитель по бесплатным менеджерам задач для Android
В этот путеводитель вошли 10 бесплатных приложений для Android, которые позволяют создавать простые списки дел (to do lists). Практически каждый менеджер включает в себя функции планировщика, поэтому количество аспектов обзора возрастает:
Интерфейс:
- Наличие русской локализации
- Удобство и скорость работы со списками
Функциональность:
- Поддержка сервисов для синхронизации, импорта
- Собственно возможность синхронизации
- Работа с задачами: указание приоритета, создание подзадач
- Возможности планировщика: создание напоминаний, повторяющихся событий
- Поиск по списку задач
- Совместный доступ к спискам задач
GTasks
GTasks — минималистичный менеджер задач. Он умеет импортировать списки из Astrid (хотя проект уже закрыт) и TickTick.com, синхронизировать задачи с популярным сервисом Google Tasks, по совместительству работать в локальном режиме.
Принцип управления GTasks очень прост. Задача может содержать заметку, из дополнительных параметров указываются приоритет и время выполнения (или же интервал, если событие повторяющееся). Кроме того, каждая задача может входить в определенный список и/или содержать в себе подзадачи.
Если скорость управления приоритетна, для этих целей предусмотрен быстрый ввод нескольких задач. Не выходя с главной страницы приложения, легко указать атрибуты. Правда, в бесплатной версии доступен ввод только трех задач за один раз. Учитывая, что функция эта далеко не уникальна среди программ такого рода, ограничение несколько необычное.
Интерфейс GTasks требует привыкания. Связано это с тем, что управлять подзадачами достаточно неудобно, особенно если в списке много элементов и нужно их перераспределить, недостает фильтров или других способов упорядочивания. Выполненные задачи удаляются, восстановить их нельзя. Из других недостатков: быстрый ввод подзадач недоступен, и единственное решение — создать задачи и трансформировать их в подзадачи. Нет настроек оформления.
О положительных моментах: множественное выделение и групповые операции с задачами очень удобны.
Резюме. В GTasks имеются спорные моменты, относящиеся к интерфейсу и функциональности, но в целом они не столь существенны. В приложении есть «ядро» — базовый набор необходимых возможностей.
Tasks Free
Еще один менеджер, который синхронизируется с Google Tasks, используя базовый инструментарий этого сервиса. Несмотря на малое количество функций, есть в Tasks Free некоторые особенности по сравнению с GTasks.
Из наиболее интересных функций — быстрый ввод заметок без ограничений. В настройках можно выбрать тему оформления (светлую или темную) и режим напоминаний. С уведомлениями все в порядке: Tasks Free интегрируется со сторонними виджетами (Pure Calendar Widget, Agenda Widget, DashClock).
Возвращаясь к самым базовым функциям. Такие возможности, как перетаскивание и сортировка, управление списками, множественное выделение — в наличии. При создании задачи можно указать дату и время выполнения, выбрать список задач. В то же время, подзадач в Tasks Free нет, нельзя указать приоритет задачи, интервал повторения.
Резюме. В целом, Tasks Free находится рядом с GTasks, хотя многие функции недоступны (см. таблицу). Оптимально использовать это приложение для создания простых списков задач. Если говорить о более сложном менеджменте, то отсутствие приоритетов и подзадач идет явно не на пользу Tasks Free.
Tick Tick
Из наиболее интересных функций TickTick можно выделить чеклисты. В принципе, их можно приравнять к подзадачам, объединенным в одну задачу. Однако чеклист не предусматривает переноса элементов списка в другую группу элементов. Во всяком случае, чеклист неплохо экономит пространство главного экрана приложения.
Интерфейс хорошо оптимизирован для работы с задачами. Сразу стоит оговориться, что быстрый их ввод недоступен. Задачи закрываются и переносятся в архив перетаскиванием, при длительном нажатии открывается контекстное меню с действиями. Таким образом можно, к примеру, быстро сменить приоритет, не обращаясь к окну редактирования задачи. Есть в наличии фильтр, который позволяет отобразить лишь актуальные задания или определенный список, и поиск.
TickTick можно встроить в браузер (расширение для Chrome), поддерживается интеграция с email: при отправке на специальный адрес сервиса приложения, письмо автоматически преобразуется в задачу. Сложно судить о востребованности данной функции, но почему бы и не использовать TickTick как веб-клиппер, вроде Evernote, для хранения заметок.
Резюме. TickTick сочетает в себе удобный, приятный интерфейс и функциональность. Интеграция со сторонними сервисами, синхронизация предполагают доступность для различных платформ. TickTick задействует для синхронизации задач собственный сервис, хотя поддержка Google Task стала бы дополнительным плюсом.
Business Tasks
Функциональность данного приложения перекочевала из Google Tasks и Toodledo. Расширенная работа с заметками предполагает добавление подзадач, повторяющихся событий, напоминаний для пропущенных звонков, умных списков по принципу отбора необходимых задач по определенному критерию.
Для группировки задач используются списки и разбивка по дням. Списки могут быть локальным или синхронизируемыми, сюда же следует добавить смарт-списки. Каждый элемент легко добавить в избранное. Business Tasks — один из немногих таск-менеджеров с функцией поиска. В результате управление большими списками не вызывает затруднений.
Из удобств интерфейса следует отметить маркировку списков. Задачи быстро перетаскиваются, закрываются и легко убираются из виду. Неплохо продумана функциональность диалога добавления задачи. Здесь есть почти все необходимое: можно прикрепить заметку, контакт, указать время и подзадачи. Доступны напоминания и виджет для вывода уведомлений.
Резюме. Добротный менеджер задач, в котором сложно искать недостатки. Одно из наиболее функциональных решений, включающих в себя возможности «напоминалки» и удобное управление списками.
Any.do
Any.do является одним фаворитов различных рейтингов. Не в последнюю очередь это связано с дизайном приложения: плавная анимация, приятное оформление диалогов и списков и т. п.
Вместе с тем, интерфейс отзывчив, и для доступа к функциям не нужно производить лишних движений. Для закрытия задачи нужно зачеркнуть ее в списке, для очистки списка от выполненных задач — потрясти телефон. Длительное нажатие — для перетаскивания элемента, короткое — переход в контекстное меню.
Доступен быстрый ввод заметок (в том числе голосовой ввод). Благодаря этому, легко вести записи в любых условиях, отложив дела «на потом». В довесок к этому, разработчики предусмотрели планирование рабочего дня. Функция «План» — своего рода мастер настройки, который позволяет быстро распределить задачи.
По замечаниям. Приложение не слишком удобно по части работы с папками, также сложновато обходиться без подзадач. В плане организации выручает привязка задач по времени, хронология, однако фильтр и поиск здесь пришлись бы кстати.
Примечательные особенности следующие. Any.do дополняет функции приятным и по-хорошему навязчивым виджетом: забыть о какой-то задаче, добавленной в Any.do, попросту невозможно. Событие можно связать с местом проведения (географически связанные напоминания). Приложение умеет подсказывать, например, где можно провести встречу, в зависимости от текущего местоположения пользователя.
Резюме. Any.do — это не только приятная оболочка, но и, что более важно, интуитивный и функциональный менеджер задач. Приложение отлично адаптируется под пользователя, содержит соответствующие функции, которые можно даже назвать интеллектуальными.
Todoist
Многие разработчики стараются внести в свой продукт некоторые уникальные функции, которые выделяют его на фоне других решений. Todoist — не только полнофункциональный менеджер задач, но и менеджер проектов.
Впрочем, как оказалось, проект в понимании Todoist — это не что иное, как категория задач. Опций, ассоциируемых с ведением проектов — в привычном понимании, — здесь минимум. Например, можно указать уровень вложенности, приоритет, добавить подзадачи, предоставить совместный доступ к проекту. На указанный при регистрации email приходит отчет со статистикой за 9 дней.
Вообще говоря, при работе с проектами можно указывать длительность выполнения. Здесь таких возможностей нет. Существенный недостаток Todoist — отсутствие списка выполненных задач (в виде истории/архива). В результате, если задание было ошибочно отмечено как выполненное, его так же легко упустить из виду.
Некоторых функций в бесплатной версии Todoist не обнаружилось. Например, добавить заметку можно лишь в премиум-версии приложения.
Несмотря на вышесказанное, управление списками задач вполне удобно за счет контекстного меню и перетаскивания. В последнем случае можно переопределить уровень вложенности задачи. Из других примечательных особенностей Todoist — фильтры. Как показывает опыт, они значительно ускоряют поиск нужных задач в длинных списках дел.
Резюме. Видимо, проектным системам Todoist конкуренцию не составит, но при этом у него есть существенные преимущества по сравнению с легкими todo-менеджерами. Бесплатная версия стала бы еще более привлекательной после устранения имеющихся в ней недостатков и снятия буквально 1-2 ограничений.
Wunderlist
Wunderlist — один из наиболее известных todo-менеджеров. Доступен он для широкого перечня платформ, включая iOS, Mac, Windows, Android; в наличии полноценный web-интерфейс.
При создании задачи можно указать время, количество повторов, создать напоминание, добавить подзадачи, заметку, комментарий и, что самое примечательное, файл. В интерфейсе приложения попросту невозможно запутаться, а это отдельный плюс. Список задач прост в управлении. Выполненные задачи переносятся вниз списка, скрываются одним кликом. На главный экран можно вынести только необходимые элементы, добавив их в избранное.
Также в основе Wunderlist лежит совместная работа. К работе со списками можно привлекать друзей, коллег. Правда, при совместном доступе к спискам задач всегда может возникнуть ситуация, когда нужно минимально проконтролировать выполнение, а скромные возможности Wunderlist не позволяют это сделать.
Резюме. Wunderlist — красивый, лаконичный и очень понятный инструмент для управления задачами. Вдобавок, одно из главных преимуществ Wunderlist — это повсеместная доступность.
To Do Reminder
В принципе, To Do Reminder повторяет функции любого другого подобного менеджера. Если обращаться к названию приложения, функция напоминания (Reminder) выходит на первый план, а списки (To Do), скорее, являются неким фоном.
При создании задачи можно указать день, время, количество повторов. Для организации событий, таких как день рождения, можно импортировать данные из Facebook или из списка контактов телефона.
К сожалению, неудобства проявляются сразу же. Во-первых, нельзя создавать задачи в два-три перехода, дата должна быть обязательно привязана к задаче (причем значение по умолчанию нужно изменять). Во-вторых, для закрытия задачи нужно обращаться к контекстному меню, а скрытый элемент нужно искать в истории. В-третьих, реклама в бесплатной версии To Do Reminder порядочно отвлекает.
Однако главный недостаток приложения заключается в том, что задачи нельзя упорядочить. Для этих целей не предусмотрены ни категории, ни фильтры, ни проекты и пр., хотя функция вроде бы очевидна.
Резюме. Менеджер To Do Reminder плохо приспособлен к быстрой работе с задачами. По большей части, недостатки кроются в слабой эргономике приложения. Сама по себе функциональность неплохая, и в качестве программы для создания напоминаний Reminder — неплохой вариант.
Noodles
Noodles — пожалуй, самый минималистичный менеджер задач, сохраняющий, однако, самые важные функции. Располагает к себе простым текстовым интерфейсом, очень интуитивным и удобным управлением. Инструментарий Noodles легко изучить, воспользовавшись инструкциями, идущими в комплекте с программой.
Из наиболее удобных моментов следует упомянуть быстрое и унифицированное создание списков и задач: поле ввода доступно в нижней части экрана. При добавлении задачи указывается ее приоритет и, при необходимости, текст заметки. Управление списками также на высоте. Для реорганизации элементов используется перетаскивание, для отметки о выполнении — зачеркивание, приоритет указывается напрямую в поле быстрого ввода. Таким образом, акцент сделан именно на скорость управления задачами.
Однако нужно отметить весьма скромную функциональность этого продукта. Так, синхронизация недоступна, что делает Noodles локальным и однопользовательским решением. Далее, в задачах нельзя указать время выполнения — то есть функции календаря напрочь отсутствуют, а сторонние сервисы не поддерживаются. Настроек в Noodles практически нет.
Резюме. Noodles позволяет создавать всевозможные списки и заметки без возможности планирования и, соответственно, уведомления о событиях. Подобный минимализм оправдан, если в первую очередь важна скорость.
Remember the Milk
Remember the Milk — еще одно популярное приложение. Интегрируется с Google Calendar, Gmail, Evernote, доступно для платформ Android и iOS, без проблем синхронизирует данные.
Условно можно выделить два варианта группировки задач: по времени и по спискам. В первом случае доступно меню с выбором времени: вся неделя или каждый день (текущий и шесть дней вперед). Второй вариант отображения — списки.
Кроме быстрого добавления задачи, легко просматривать выполненные задания, для этого предназначено меню в нижней части экрана. Remember the Milk позволяет создавать задачи с несколькими заметками. Помимо этого, доступны различные поля: повторение, примерное время, места, ссылки, теги. Теги — более гибкая замена привычным папкам.
Главная особенность Remember the Milk — это синтаксис запросов, который помогает ускорить добавление задач, а также улучшить их последующий поиск.
Настройки приложения порадовали. Здесь имеются опции, относящиеся к задачам, оформлению, синхронизации, напоминаниям и др.
Резюме. Отличный менеджер задач со сбалансированной функциональностью и приятным оформлением. Приятно и то, что в бесплатной версии есть функции, чаще всего встречаемые лишь в pro-версии подобных приложений.
Источник