Третий способ - интерфейс OnClickListener

Третий способ является родственным второму способу и также является традиционным для Java. Кнопка присваивает себе обработчика с помощью метода setOnClickListener (View.OnClickListener l), т.е. подойдет любой объект с интерфейсом View.OnClickListener. Мы можем указать, что наш класс Activity будет использовать интерфейсView.OnClickListener.

Опять стираем код от предыдущего примера. Далее после слов extends Activity дописываем слова implements OnClickListener. Если вы написали код через подсказку, то строка import android.view.View.OnClickListener; вставится в секцию импорта автоматически, в противном случае пропишите самостоятельно.

Название вашего класса будет подчёркнуто волнистой красной чертой, подведите курсор мыши к слову и выберите вариант Add unimplemented methods. В коде появится заготовка для нажатия кнопки.

@Overridepublic void onClick(View v) { // TODO Auto-generated method stub }

Метод будет реализован не в отдельном объекте-обработчике, а в Activity, который и будет выступать обработчиком. В методе onCreate() присвоим обработчик кнопке. Это будет объект this, т.е. текущий объект нашей активности.

button1.setOnClickListener(this);

На первых порах такой способ покажется вам сложным и непонятным. Со временем и опытом понимание обязательно придёт.

Лично я рекомендую вам использовать первый способ, как самый простой и понятный. Использование второго и третьего способа дадут вам представление, как писать обработчики для других событий, так как кнопка может иметь и другие события. Например, кроме обычного нажатия существует долгое нажатие на кнопку (long click). Один из таких примеров с методом касания я привёл в конце этой статьи.

О том, как обрабатывать щелчки кнопки я написал отдельную статью Щелчок кнопки/Счетчик ворон. Также кнопки часто будут встречаться во многих примерах на сайте. Про обработку длительный нажатий можно прочитать в статье, посвященной ImageButton.

Плодитесь и размножайтесь - это про кошек, а не про кнопки

Программный код простых кнопок наследуется от класса TextViewи, в свою очередь, является базовым классом для класса СompoundButton. От класса CompoundButtonзатемнаследуются такие специальные кнопочные элементы как:


Компоненты RadioButton (переключатель) используются в составе контейнера RadioGroup. Обратите внимание на два момента. Первое - в контейнер RadioGroup можно включать не только RadioButton, но и другие элементы, например,TextView. Второе - переключатели работают в своем контейнере, т.е. если у вас два контейнера RadioGroup, то переключатели из одного контейнера не влияют на поведение переключателей второго контейнера.

Методы

Основным методом для переключателя является toggle(), который инвертирует состояние переключателя. Также представляют интерес методы isChecked(), который возвращает состояние кнопки, и setChecked(), изменяющий состояние кнопки в зависимости от параметра.

radio1.setChecked(true); // программно устанавливаем статус у переключателя radio1

Для уведомления о переходе положения переключателя в активное или неактивное состояние в результате определенных событий, нужно вызывать метод setOnCheckedChangeListener() с применением интерфейса OnCheckedChangeListener.

Программное добавление переключателя

Получив ссылку на группу переключателей, можно добавить в неё еще один переключатель (или другой элемент управления) через метод addView():

RadioGroup radiogroup = (RadioGroup )findViewByld(R.id.radioGroup); RadioButton newRadioButton = new RadioButton(this); newRadioButton.setText("Рыжий"); radiogroup.addView(newRadioButton);

Наши рекомендации