- •Ос. Лабораторная работа №2 знакомство с пРограммированием на java. Програмирование расчетного android-приложения
- •Задание на разработку
- •Теоретические сведения.
- •Программный код на Java
- •Использование операторов Import для подключения классов из sdk Android
- •Класс MainActivity – инфраструктура приложения
- •Метод onCreate() класса MainActivity – создание инфраструктуры приложения
- •Метод onCreateOptionsMenu() класса MainActivity – создание меню приложения
- •Метод onOptionsItemSelected() класса MainActivity – обработка щелчков (касаний) элементов панели действий
- •Реализация приложения Tip Calculator
- •Инструкции package и import
- •Класс ActionBarActivity и жизненный цикл активностей приложения Tip Calculator
- •Поля (переменные) класса
- •Переопределение метода OnCreate() класса MainActivity
- •Разработка метода updateStandard() класса MainActivity
- •Разработка метода updateCustom() класса MainActivity
- •Переопределение метода onSaveInstanceState() класса Activity
- •Анонимный внутренний класс, реализующий интерфейс OnSeekBarChangeListener
- •Анонимный внутренний класс, реализующий интерфейс TextWatcher
- •Завершение разработки класса MainActivity и всего приложения
Переопределение метода onSaveInstanceState() класса Activity
В листинге ниже переопределяется дополнительный метод onSaveInstanceState() жизненного цикла активности, оболочка для которого автоматически не генерируется Android Studio по умолчанию. Этот метод вызывается операционной системой в случае изменения конфигурации устройства при выполнении приложения (например, при вращении устройства пользователем или выдвижении клавиатуры устройства). Чтобы сгенерировать оболочку этого метода в Android Studio, сначала установите курсор на строку исходного кода, начиная с которой нужно вставить этот метод, а затем щелкните правой кнопкой мыши и в контекстном меню выберите команду Generate…➤Override Methods…. В появившемся диалоговом окне отображаются методы, которые могут быть переопределены и реализованы в классе и которых там еще нет (рис. 3).
Рисунок 3. Диалоговое окно выбора методов для переопределения и реализации в классе активности
В этом окне в папке android.support.v4.app.FragmentActivity выделите метод onSaveInstanceState() и щелкните на кнопке OK для создания оболочки метода. После этого переопределите его следующим образом:
// сохранение значений billEditText и customSeekBar
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putDouble(BILL_TOTAL, currentBillTotal);
outState.putInt(CUSTOM_PERCENT, currentCustomPercent);
} // конец метода onSaveInstanceState()
В разрабатываемом приложении сначала вызывается метод onSaveInstanceState() базового класса (суперкласса), потом сохраняются пары «ключ/значение» в объекте класса Bundle, который был передан методу системой. В строке 143 сохраняется текущая сумма итогового счета, а в строке 144 сохраняется процентная ставка настраиваемых чаевых (соответствует текущему положению ползунка SeekBar). Эти значения будут использованы потом методом onCreate(), который вызывается для восстановления приложения после изменения конфигурации.
Анонимный внутренний класс, реализующий интерфейс OnSeekBarChangeListener
Ранее в строке 81 листинга был зарегистрирован объект customSeekBarListener в качестве объекта - слушателя, выполняющего обработку событий ползунка customSeekBar. В листинге ниже этот объект - слушатель событий ползунка customSeekBar создается с использованием анонимного внутреннего класса, реализующего интерфейс OnSeekBarChangeListener. В строке 148 листинга ниже customSeekBarListener объявляется как объект интерфейса OnSeekBarChangeListener. Это значит, что неявно создается класс, наследующий этот интерфейс, все методы которого нужно реализовать. Что и делается в строках 153–170 приведенного ниже листинга:
// вызывается при изменении пользователем положения ползунка SeekBar
private OnSeekBarChangeListener customSeekBarListener =
new OnSeekBarChangeListener()
{
// обновление currentCustomPercent, потом вызов updateCustom
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser)
{
// присваивание currentCustomPercent положения ползунка
// SeekBar
currentCustomPercent = seekBar.getProgress();
updateCustom(); // обновление EditTexts пользовательскими
// чаевыми и итоговыми счетами
} // конец метода onProgressChanged()
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
} // конец метода onStartTrackingTouch()
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
} // конец метода onStopTrackingTouch()
};// конец OnSeekBarChangeListener()
В строках 153–159 реализуется метод onProgressChanged(). В строке 157 метод getProgress() объекта SeekBar возвращает целочисленное значение, находящееся в диапазоне 0–100. Это значение соответствует положению ползунка объекта SeekBar и присваивается переменной currentCustomPercent. В строке 158 вызывается метод updateCustom(), который используется для вычисления и отображения пользовательских чаевых и итогового счета.
В Java нужно реализовать каждый метод интерфейса. И хотя в создаваемом приложении не используются два оставшиеся методы интерфейса OnSeekBarChangeListener, чтобы выполнить правила Java, создается тело без инструкций для каждого из этих методов (строки 161–169).
