Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаборторна робота №2.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

Оновлення рівня представлення

Після теоретичного знайомства з MVC пора переходити до практики — оновимо рівень представлення GeoQuiz і включимо в нього кнопку Next.

  • Android об'єкти рівня представлення зазвичай заповнюються на основі розмітки XML у файлі макету. Увесь макет GeoQuiz визначається у файлі activity _ quiz.xml.

  • його слід внести зміни, представлені на мал. 2.6. (Для економії місця на малюнку не показані атрибути віджетів, що залишилися без змін.)

Мал. 2.6. Нова кнопка

Итак, на рівні представлення необхідно внести наступні зміни:

Видаліть атрибут android : text з TextView. Жорстко запрограмований текст питання не має бути присутнім у визначенні.

Призначте TextView атрибут android : id. Ідентифікатор ресурсу потрібний віджету для того, щоб ми могли задати його текст в коде QuizActivity.

Додайте новий віджет Button як нащадка кореневого елементу LinearLayout. Поверніться до файлу activity _ quiz.xml і виконаєте усі перераховані дії.

Лістинг 2.3. Нова кнопка і зміни в TextView(activity _ quiz.xml)

<LinearLayout

... >

<TextView android: id="@+id/question _ text _ view"

Лістинг 2.3(продовження)

Збережіть файл activity _ quiz.xml. Можливо, на екрані з'явиться знайома помилка з інформацією про відсутній строковий ресурс.

Поверніться до файлу res/values/strings.xml. Видаліть рядок питання і додайте рядок для нової кнопки.

Лістинг 2.4. Оновлені рядки(strings.xml)

Поки файл strings.xml відкритий, додайте рядка з питаннями по географію, яка пропонуватиметься користувачеві.

Лістинг 2.5. Додавання рядків питань(strings.xml)

Зверніть увагу на використання службової послідовності \` для включення апострофа в останній рядок. У строкових ресурсах можуть використовуватися усі стандартні службові послідовності, включаючи \n для позначення нового рядка.

Збережіть файли. Поверніться до файлу activity_quiz.xml і ознайомтеся зі змінами макету в графічному конструкторі.

Поки це усе, що відноситься до рівня представлення GeoQuiz. Пора зв'язати все воєдино в класі контроллера QuizActivity.

Оновлення рівня контроллера

У попередній главі в єдиному контроллері GeoQuiz — QuizActivity — не відбувалося майже нічого. Він відображав макет, визначений у файлі activity _ quiz. xml, призначав слухачів для двох кнопок і організовував видачу повідомлень.

Тепер, коли у нас з'явилися додаткові питання, класу QuizActivity доведеться докласти додаткові зусилля для зв'язування рівнів моделі і представлення GeoQuiz.

Відкрийте файл QuizActivity.java. Додайте змінні для TextView і нової кнопки Button. Також створіть масив об'єктів TrueFalse і змінну для індексу масиву.

Лістинг 2.6. Додавання змінних і масиву TrueFalse

Програма кілька разів викликає конструктор TrueFalse і створює масив об'єктів TrueFalse.

(У складнішому проекті цей масив створювався б і зберігався у іншому місці. Пізніше ми розглянемо правильніші варіанти зберігання даних моделі. А доки для простоти масив створюватиметься в контроллері.)

Ми збираємося використати mQuestionBank, mCurrentIndex і методи доступу TrueFalse для виведення на екран серії питань.

Розпочнемо з отримання посилання на TextView і завдання тексту віджета питання з поточним індексом.

Лістинг 2.7. Підключення віджета TextView(QuizActivity.java)

Збережіть файли і перевірте можливі помилки. Запустіть програму GeoQuiz. Перше питання з масиву повинне відображатися у віджете TextView.

Тепер розберемося з кнопкою Next. Отримайте посилання на кнопку, призначте їй слухача View.OnClickListener. Цей слухач збільшуватиме індекс і оновлюватиме текст TextView.

Листинг 2.8. Подключение новой кнопки (QuizActivity.java)

Запустіть GeoQuiz і протестуйте нову кнопку Next.

Итак, з питаннями ми розібралися — пора звернутися до відповідей. І знову ми реалізуємо закритий метод для інкапсуляції коду замість того, щоб вставляти однаковий код в двох місцях.

Сигнатура методу, який буде доданий в QuizActivity, виглядає так: private void checkAnswer(boolean userPressedTrue)

Метод отримує логічну змінну, яка вказує, яку кнопку натиснув користувач: True або False. Відповідь користувача перевіряється по відповіді поточного об'єкту TrueFalse. Нарешті, після визначення правильності відповіді метод створює повідомлення для виведення відповідного повідомлення.

Включіть у файл QuizActivity.java реалізацію checkAnswer(boolean), приведену в лістингу 2.10.

Лістинг 2.10. Додавання методу checkAnswer(boolean) (QuizActivity.java)

...

public class QuizActivity extends Activity {

Програма GeoQuiz знову готова до роботи. Давайте запустимо її на реальному пристрої.

Запуск на пристрої

У цьому розділі ми займемося налаштуванням системи, пристрої і додатки для виконання GeoQuiz на фізичному пристрої.

Підключення пристрою

Передусім підключіть пристрій до системи. У системі Windows може знадобитися установка драйвера adb(Android Debug Bridge). Якщо Windows не може знайти драйвер adb, завантажите його з сайту виробника пристрою.

Щоб переконатися в тому, що пристрій був успішно пізнаний, відкрийте панель Devices. Для цього найпростіше відкрити перспективу DDMS, клацнувши на кнопці DDMS в правому верхньому кутку інструментального вікна Eclipse. Панель Devices повинна відкритися в лівій частині інструментального вікна. У списку мають бути присутніми як AVD, так і фізичний пристрій.

Щоб повернутися до редактора і інших панелей, клацніть на кнопці Java в правому верхньому кутку інструментального вікна.

Якщо у вас виникнуть труднощі з розпізнаванням пристрою, передусім спробуйте наново ініціалізувати adb. На панелі Devices клацніть на кнопці на стрілці, що вказує вниз, в правій верхній частині панелі. На екрані з'являється меню. Виберіть в нім нижню команду Reset adb. Можливо, через нетривалий час пристрій з'явиться в списку.

Якщо скидання не допомагає, додаткову інформацію можна знайти на сайті розробників Android. Розпочніть із сторінки http://developer.android.com/tools/device. html або зверніться на форум книги forums.bignerdranch.com за додатковою інформацією про вирішення проблеми.