Публикации - Mobile Operating Systems

Android - Listeners

Приложения Android управляются событиями (event-driven). Это значит, что приложение запускается и ожидает событий пользователя, например, нажатие кнопки. Когда приложение ожидает наступления события, оно прослушивает данное событие. Объект, создаваемый для ответа называется слушателем (listener).

Нам надо научить кнопку реагировать на нажатие. Для этого у кнопки есть метод setOnClickListener (View.OnClickListener). На вход подается объект с интерфейсом View.OnClickListener. Именно этому объекту кнопка поручит обрабатывать нажатия. Давайте создадим такой объект. Данный код нунжо прописать в методе onCreate.

Назначение прослушивателя события нажатия кнопки

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mQuestionTextView = (TextView) findViewById(R.id.question_text_view);

mTrueButton = (Button) findViewById(R.id.true_button);

mTrueButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mQuestionTextView.setText('нажата кнопка')

}

});

}

Слушатель реализован в виде внутреннего анонимного класса. Анонимный класс реализует интерфейс OnClickListener, и должен реализовать единственный метод данного интерфейса onClick(View).

Обработка события нажатия onClick

Существует несколько способов обработки нажатия на кнопку. 1) Традиционный для Java, с использованием интерфейсов, для этого необходимо реализовать интерфейс View.OnClickListener либо других событийных интерфейсов. 2) Разработанный специально для Android. Рассмотрим его подробнее.

Для прослушивания события onClick, можно использовать атрибут XML – onClick, который записывается в XML-коде элемента управления (в частности к Button), нажатие которого мы собираемся обрабатывать.

Добавление прослушивателя onClick в XML. Листинг 1.

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_name"

android:layout_gravity="bottom|right"
android:onClick="onClickFind"
android:id="@+id/button"
android:layout_below="@+id/categories"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

Атрибут android:onClick=’onClickFind’ элемента button на событие click запускает экшн onClickFind контроллера MainActivity.

Вернемся к контроллеру MainActivity, и преобразуем его, дописав метод onClickFind.

Экшн onclickFind контроллера MainActivity. Листинг 1.

package by.colony.mikhalkevich.android;

import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Spinner;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickFind(View view){
TextView text = (TextView) findViewById(R.id.textView);
Spinner category = (Spinner) findViewById(R.id.categories);
String chooseCategory = String.valueOf(category.getSelectedItem());
text.setText(chooseCategory);
}
}

Метод onClickFind входящим параметром принимает данные текущего шаблона. В нем имеется два объекта text и category и переменную chooseCategory с данными выбранной категории. Объект text обращается к методу setText, который обновляет атрибут android:text.

Если несколько кнопок представления вызывают событием один и тот же метод, то этому методу необходимо определить какая кнопка была нажата. Сделать это можно с помощью метода getId класса View.

Метод, обрабатывающий несколько кнопок.

public void onClickFind(View v) {

//ищем второй TextView

TextView tv = (TextView)findViewById(R.id.textView2);

// определяем ID элемента и обрабатываем событие

switch (v.getId())

{

case R.id.button1:

tv.setText("Button 1");

break;

case R.id.button2:

tv.setText("Button 2");

break;

case R.id.button3:

tv.setText("Button 3");

break;

}

}

Обработчик нажатия готов.

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться