Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6824 / 1221 | Длительность: 14:18:00
Специальности: Программист
Самостоятельная работа 4:

Создание многоэкранного приложения

< Лекция 4 || Самостоятельная работа 4: 12345 || Лекция 5 >
Аннотация: Научиться создавать приложения, состоящие из нескольких активностей, и диалоговые окна, а также познакомиться с элементами тач-интерфейса.

Цель лабораторной работы:

Научиться создавать приложения, состоящие из нескольких активностей, и диалоговые окна, а также познакомиться с элементами тач-интерфейса

Задачи лабораторной работы:

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

8.1 Введение

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

8.2 Создание многоэкранного приложения со списком

1. Создайте проект MultiScreen. В java-файле замените Activity на ListActivity. Класс ListActivity разработан таким образом, что на экране есть только прокручиваемый список и ему не нужна дополнительная разметка. Поэтому файл activity_main.xml можно удалить. Также следует удалить следующую строчку из класса MultiScreen:

setContentView(R.layout.activity_main);
    

т.к. layout-файл мы только что удалили.

2. Теперь нам нужен посредник, который свяжет список и названия элементов этого списка. Для этого в Android есть интерфейс Adapter. Нам потребуется наследник этого класса ArrayAdapter:

new ArrayAdapter(Context context, int textViewResourceId, String[] objects)
    

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

Мы можем указать в качестве текущего контекста ListActivity (можно использовать ключевое слово this), готовый системный идентификатор ресурса (android.R.layout.simple_list_item_1) и созданный массив строк (String[] islands = { "Канары", "Курилы", "Мальдивы", "Филиппины"};). А выглядеть это будет так:

private ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, islands);
    

Обратите внимание на строчку android.R.layout.simple_list_item_1. В ней уже содержится необходимая разметка для элементов списка. Если вас не устраивает системная разметка, то можете создать собственную разметку в xml-файле и подключить её.

Осталось только подключить адаптер:

setListAdapter(adapter);
    

3. Теперь нам нужно подключить обработку нажатия. Для этого необходимо знать, на какой пункт списка осуществляется нажатие. Существует специальный интерфейс OnItemClickListener с методом onItemClick(). Подключаем обработчик: getListView().setOnItemClickListener(itemListener); Набираем все в том же onCreate

OnItemClickListener itemListener = new OnItemClickListener(){
}
    

Если подчеркнётся первое слово, то импортируем нужный класс. Далее подведём курсор ко второму слову new OnItemClickListener. Нам будет предложено добавить метод (Add unimplemented method). Соглашаемся и получаем заготовку:

OnItemClickListener itemListener = new OnItemClickListener() {

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
			long arg3) {
		// TODO Auto-generated method stub
		
	}
};
    

Меняем имена переменных arg на более привычные и понятные

public void onItemClick(AdapterView<?> parent, 
View v, int position, long id);
    

4. Осталось описать, что будет происходить при нажатии на элемент.

По нашей задумке каждый элемент будет открывать новое окно с соответствующим содержимым.

Для начала следует создать еще 4 класса: Canari, Curili, Maldivi, Philippini, и 4 xml-оболочки к ним. Можно просто создать и копировать по одному файлу в обеих директориях, меняя только название и содержимое.

Например, создадим файлы Canari.java и canari.xml типа Activity. Обратите внимание, что как только мы создали ещё один java-файл, нужно записать его в файл манифеста, иначе приложение не будет видеть этот новый класс. Файл AndtoidManifest.xml находится сразу под папкой res. Добавьте код с именем класса в тегах <activity></activity>, сразу под главной активностью.

<activity  	android:name="com.mypackage.multiscreen.Canari"
     android:label="@string/can" >
</activity>
    

Строку can нужно создавать в файле strings.xml, также как и другие строки.

Перейдем в файл canari.xml и создадим на экране TextView. Экраны будут отличаться друг от друга картинками. Возьмите 4 любые картинки с вашего компьютера (можете также найти их в интернете) и перетащите из проводника Windows в папку res\drawable. Теперь вы можете поместить элемент ImageView на экран и, выбрав нужную картинку из ресурсов проекта, подключить ее.

Остальные экраны создаются аналогично.

5. Теперь перейдем в главный класс и опишем обработку события onItemClick(). Создадим переключатель, который зависит от номера элемента.

switch (position) {
        case 0:
                	 
            break;
        case 1:
                	 
            break;
        case 2:
                	 
            break;
                    
        case 3:
 
            break;
}
    

Для запуска нового экрана необходимо создать экземпляр класса Intent и указать класс, на который будем переходить (у нас их 4, поэтому для каждого случая выбираем свою). После этого вызывается метод startActivity(), который и запускает новый экран.

Intent intent = new Intent(MultiScreen.MainActivity.this, Canari.class);
    		    startActivity(intent);
    
< Лекция 4 || Самостоятельная работа 4: 12345 || Лекция 5 >
Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.