1 мая 2014 г.

Обработка событий нажатия на кнопку (атрибут onClick)



Атрибут onClick

Относительно новый способ, специально разработанный для Android - атрибут onClick (на панели свойств отображается как On Click):





Пример XML разметки

android:onClick="myShopping_Click"

Для этого метода в классе активности нужно прописать имя метода, который будет обрабатывать нажатие.

Метод должен быть открытым public и с одним параметром, использующим объект View.

public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void myShopping_Click(View view) {
// выводим всплывающее сообщение
Toast.makeText(this,"Thank you for shopping with us!",Toast.LENGTH_SHORT).show();
}

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

button1 = (Button)findViewById(R.id.button1);

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

Данный способ возможно не будет работать в фрагментах!!!



Рассмотрим несколько примеров обработки нажатия на кнопку




Перетаскиваем элемент Button в activity_main.xml. В Properties, найдите свойство Text и присвойте значение Say something, свойству id присвойте значение @+id/butGoodMorning вместо стандартного @+id/button1.
Создаём метод для обработки нажатия на кнопку. В свойстве On Click, нашей кнопки, мы присвоили имя методу как butGoogMorning_Click.

Переключитесь с вкладки Graphical Layout на вкладку activity_main.xml и найдите тег <Button>.

У вас должна появиться такая строчка

android:onClick="butGoodMorning_Click"

Таким образом мы определили событие butGoodMorning_Click для кнопки и теперь осталось написать обработчик события.

Далее, перетаскиваем элемент TextView, если у вас его не было. Элемент TextView является текстовой меткой для вывода текста. В метке будем выводить сообщение после щелчка кнопки. В окне свойств удаляем текст из свойства Text, чтобы в текстовой метке ничего не было. Проследите, чтобы у него был идентификатор. Теперь система знает о существовании элемента TextView и мы можем к нему обращаться для изменения различных свойств.

Открываем файл MainActivity.java. До метода onCreate() добавьте строчку: 

TextView sayGoodMorning;
//Мы объявили переменную sayGoodMorning типа TextView

Далее внутри метода onCreate() после вызова метода setContentView() добавьте строку:

sayGoodMorning = (TextView)findViewById(R.id.textView1);

Рассмотрим, почему для TextView нужны скобки. Сам по себе метод findViewById() возвращает объект View, вы сами можете убедиться, если подведёте курсор к названию метода - findViewById.

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

Метод findViewById() используется для получения ссылки на элемент, у которого мы определили id.

Пишем код нашего метода сразу после метода onCreate: 

public void butGoodMorning_Click() {
// переменной sayGoodMorning через метод setText() присваиваем нужный текст
sayGoodMorning.setText("Good Morning!");
}

Часть исходного кода

public class MainActivity extends ActionBarActivity {
TextView sayGoodMorning;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sayGoodMorning = (TextView)findViewById(R.id.textView1);
}

public void butGoodMorning_Click(View v) {
// переменной sayGoodMorning через метод setText() присваиваем нужный текст
sayGoodMorning.setText("Good Morning!");
} 

Рассмотрим более короткий пример обработки нажатия на кнопку

В этом примере, мы сразу, в методе butGoodMorningTwo_Click объявляем переменную sayGoodMorning типа TextView и ссылаемся на метку textView1

Сразу после метода onCreate() пишем: 

public void butGoodMorningTwo_Click(View v)  {
// переменная sayGoodMorning ссылается на метку textView1
TextView sayGoodMorning = (TextView)findViewById(R.id.textView2);
// присваиваем ей нужный текст через метод setText()
sayGoodMorning.setText("Good Morning Again!");
} 

Часть исходного кода будет выглядеть следующим образом.

public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void butGoodMorningTwo_Click(View v) {
TextView sayGoodMorning = (TextView)findViewById(R.id.textView2);
sayGoodMorning.setText("Good Morning Again!");
}

Комментариев нет :

Отправить комментарий

Оставить отзыв