Программирование методовИтак, начнем с метода onCreate(…). Этот метод вызывается первым при создании нового activity, в нем подгружается layout и делаются другие необходимые при запуске операции. Автосгенерированная реализация onCreate(…) выглядит так (рисунок 6):
Рисунок 6. Метод onCreate().Метод setContentView() задает, как будет выглядеть activity: указывает, какой layout необходимо использовать. В данном случае будет достаточно стандартного списка, который предлагает ListActivity, поэтому какой-то дополнительный layout не нужен: просто убирите эту строчку. Теперь можно удалить XML для layout'а activity_main.xml.
В Android существует специальный механизм для доступа к структурированным данным, он называется Content Providers. ContentResolver – это стандартный класс, который реализует концепцию доступа к данным Content Providers. Передав этому классу соответствующий URI (унифицированный идентификатор ресурса), можно получить доступ к определенным данным, в нашем случае к списку аудиофайлов. Для того чтобы получить курсор (о том, что такое курсор, ниже) для доступа к списку аудиофайлов, достаточно следующего кода:
- Код: выделить все
ContentResolver contentResolver = getContentResolver();
Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
Итак, курсор – это интерфейс, который позволяет получать доступ к каким либо данным. В нашем случае это информация об аудиофайлах. Курсор, в общем случае, необходимо закрыть, когда работа с ним завершена. Мы можем поручить эту работу самому activity, вызвав startManagingCursor(cursor). Этот метод, начиная с 11ой версии API, помечен как deprecated (устаревший). Устаревшие методы не рекомендуется использовать, но в данном случае использование startManagingCursor() вполне оправданно, так как нам не требуется обновление данных. Eclipse покажет предупреждение, о том, что метод помечен как устаревший, поэтому нужно навести на него мышкой и нажать
«Add @SuppressWarnings ...».Теперь нужно как-то связать полученный курсор и activity. Для этого служат адаптеры. В данном случае не нужно писать свой адаптер, а можно воспользоваться готовым SimpleCursorAdapter.
- Код: выделить все
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.two_line_list_item,
cursor,
new String[] {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST},
new int[] {android.R.id.text1, android.R.id.text2},
0);
Конструктор выглядит немного навороченно, поэтому рассмотрим подробнее список его параметров:
1. Первым параметром передается контекст. Пока что достаточно будет сказать, что для некоторых операций программам на Android нужен контекст. Контекст есть у основных элементов приложения, таких как activity и сервис, а также существует общий контекст приложения. Поэтому чтобы взять контекст текущей activity, достаточно просто передать this (указатель на экземпляр класса).
2. Вторым параметром задается layout, описывающий, как будет выглядеть каждый отдельный элемент списка. Достаточно будет использовать стандартный список с двумя надписями. Он называется two_line_list_item и находится в самом Android'е.
3. Курсор.
4. Массив строк, определяющий, какие поля будут использоваться для отображения в списке.
5. Массив id элементов, соответствующих строкам из предыдущего пункта. В нашем случае TITLE запишется в text1, а ARTIST в text2.
6. Дополнительные флаги (побитовая комбинация, 0 – отсутствие флагов).
Теперь необходимо передать адаптер в activity, для этого нужно вызвать метод setListAdapter:
setListAdapter(adapter);
Уже сейчас приложение должно показывать список аудиофайлов. Результат работы должен быть аналогичен скриншоту (рисунок 7):
Рисунок 7. Список аудиофайлов на Android.