Как запрограммировать нажатие кнопки:
Чтобы нажатие кнопки что-то выполнялось, надо сначала создать обработчик (объект) который отслеживает событие нажатия (слушает). В это обработчике пишем исполняемый код. Затем этот обработчик устанавливаем нужному объекту на форме с помощью соответствующего метода.
Внутри метода onCreate класса Activity создаем обработчик с помощью кода:
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
Устанавливаем обработчик для нужного объекта (кнопки)
btnOk.setOnClickListener(oclBtnOk);
OnClickListener - это объект, который слушает нажатие клавиши мыши
onClick - метод объекта, который мы переназначаем. Теперь у нас есть слушатель, который при нажатии кнопки мыши что-то делает
btnOk - это объект класса Button. У него есть метод setOnClickListener, который назначает нужного слушателя на событие нажатия кнопки
Есть вариант, когда запись будет более сокращенной:
(findViewById(R.id.oclBtnOk)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
...;
}
Здесь предварительно не надо объявлять переменную btnOk типа Button. Метод findViewById возвращает объект типа View, у которого есть метод setOnClickListener, которым мы и воспользовались.
Можно назначить один обработчик для нескольких кнопок. Чтобы различать какая кнопка нажата, внутри метода onClick добавим оператор условного перехода с проверкой id переданного на вход объекта.
public void onClick(View v) {
// по id определеяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btnOk:
// кнопка ОК
tvOut.setText("Нажата кнопка ОК");
break;
case R.id.btnCancel:
// кнопка Cancel
tvOut.setText("Нажата кнопка Cancel");
break;
}
}
Использование одного обработчика экономит память.
Чтобы экономия была максимальной, то можно использовать метод OnClickListener самого класса Activity. для этого в строке создания класса указывается "implements OnClickListener". После добавления данного текста внутри класса автоматически добавиться метод onClick.
В результате у объекта класса Activity переназначаем не только метод onCreate(), но и метод onClick. Чтобы этот механизм работал нужно будет добавить импорт соответствующих описаний классов.
public class MainActivity extends Activity implements OnClickListener {
TextView tvOut;
Button btnOk;
Button btnCancel;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// найдем View-элементы
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);
// присваиваем обработчик кнопкам
btnOk.setOnClickListener(this);
btnCancel.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// по id определяем кнопку, вызвавшую этот обработчик
switch (v.getId()) {
case R.id.btnOk:
// кнопка ОК
tvOut.setText("Нажата кнопка ОК");
break;
case R.id.btnCancel:
// кнопка Cancel
tvOut.setText("Нажата кнопка Cancel");
break;
}
}
}
Методы обработки события для разных типов интерфейсов могут отличаться, например, для элемента формы SeekBar (ползунок) для обработки события изменения надо использовать implements OnSeekBarChangeListener.
Третий способ обработки события нажатия кнопки - это описать публичный метод внутри класса Activity и указать его в свойстве android:onClick.
Например:
В файле макета:
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickStart"
android:text="start">
</Button>
В файле java
public void onClickStart(View v) {
// действия при нажатии на кнопку
}
|