MyTetra Share
Делитесь знаниями!
Вывод списков и ListFragment
17.04.2017
11:04
Раздел: Android - books - AndroidProgramming2e - 9 Вывод списков и ListFragment


Для любознательных: ListView и GridView

Базовый вариант ОС Android включает классы ListView, GridView и Adapter. До

выхода Android 5.0 эти классы считались наиболее правильным способом создания разнообразных списков или таблиц.

API этих компонентов очень близки к API RecyclerView. Класс ListView или

GridView отвечает за прокрутку наборов вариантов, но почти ничего не знает об

отдельных элементах списка. Adapter отвечает за создание всех представлений

в списке. С другой стороны, классы ListView и GridView не заставляют применять

паттерн ViewHolder (хотя вы можете — и даже должны — применять его).

Сейчас старые реализации практически вытеснены RecyclerView из-за сложностей,

связанных с изменением поведения ListView или GridView. Например, возможность

создания ListView с горизонтальной прокруткой не включена в API ListView, а ее

реализация требует значительной работы. Создание нестандартного макета и

реализация прокрутки в RecyclerView все равно требует значительной работы, но класс

RecyclerView строился в расчете на расширение, поэтому все не так плохо.

Другая важная особенность RecyclerView — анимация элементов списка. Анимация

добавления и удаления элементов в ListView или GridView — сложная, ненадежная задача.

RecyclerView существенно упрощает ее, включает несколько

встроенных анимаций и позволяет легко настроить эти анимации.

Например, если обнаруживается, что элемент в позиции 0 переместился в позицию 5,

перемещение можно анимировать следующим образом:

mRecyclerView.getAdapter().notifyItemMoved(0, 5);


Для любознательных: синглеты

Паттерн «Синглет», используемый в CrimeLab, очень часто применяется в Android.

Синглеты пользуются дурной славой, потому что они открывают возможности

для многочисленных злоупотреблений, усложняющих сопровождение кода.

Синглеты часто применяются в Android, так как их они живут дольше отдельных

фрагментов или активностей. Синглет переживает повороты устройства и существует

при перемещении между активностями и фрагментами в приложении.

Синглеты могут стать удобными владельцами объектов модели. Представьте более

сложное приложение CriminalIntent с множеством активностей и фрагментов,

изменяющих информацию о преступлениях. Когда один контроллер изменяет

преступление, как организовать передачу информации об обновленном преступлении

другим контроллерам? Если CrimeLab является владельцем объектов

преступлений и все изменения в них проходят через CrimeLab, распространение

информации об изменениях значительно упрощается. При передаче управления

между контроллерами можно передавать идентификатор преступления, а каждый

контроллер извлекает полный объект преступления из CrimeLab по идентификатору.

Тем не менее у синглетов имеются свои недостатки. Например, хотя они хорошо подходят

для хранения данных с большим сроком жизни, чем у контроллера,

у синглетов все же имеется срок жизни. Android в какой-то момент после переключения от

приложения может освободить память, и тогда синглеты будут уничтожены вместе со всеми

переменными экземпляров. Синглеты не подходят для

долгосрочного хранения данных (в отличие, скажем, от записи файлов на диск

или их отправки на веб-сервер).

Синглеты также усложняют модульное тестирование кода. Экземпляры CrimeLab

трудно заменить их фиктивными версиями, потому что код напрямую вызывает

статический метод объекта CrimeLab. На практике Android-разработчики обычно

решают эту проблему при помощи инструмента, называемого внедрителем зависимостей. Он

позволяет организовать использование синглетных объектов, сохраняя

при этом возможность замены их при необходимости.

Как говорилось ранее, синглеты часто используются некорректно. У программиста возникает

искушение применять синглеты везде и повсюду, потому что они

удобны: к ним можно обращаться откуда угодно и в них можно хранить любую

информацию, которая понадобится вам позднее. Но при этом вы не пытаетесь ответить на

важные вопросы: где используются эти данные? Чем важен этот метод?

Синглет обходит эти вопросы. Любой разработчик, который придет после вас, откроет синглет

и обнаружит некое подобие сундука, в который сваливают всякий

хлам: батарейки, стяжки для кабелей, старые фотографии. Зачем здесь все это?

Убедитесь в том, что все содержимое синглета действительно глобально и для хранения данных

в синглете существуют веские причины.

Впрочем, с учетом всего сказанного синглеты являются ключевым компонентом

хорошо спланированного приложения Android — при условии правильного использования.


 
MyTetra Share v.0.52
Яндекс индекс цитирования