Xử lý sự kiện trong android (Bài 3)
Xử lý sự kiện trong android sẽ giúp các bạn biết sự kiện là một cách hữu ích để thu thập dữ liệu về sự tương tác của người dùng với các thành phần tương tác của ứng dụng.
Giống như bấm vào một nút hoặc chạm vào màn hình cảm ứng, vv. Bạn có thể nắm bắt những sự kiện trong chương trình của bạn và có những xử lý thích hợp theo yêu cầu.
Xử lý sự kiện trong android – Có hai khái niệm
Event Listeners là một interface. Event Listeners được sử dụng để đăng ký sự kiện cho các thành phần trong UI. (Đăng ký sự kiện)
Event Handlers – Là phương thức xử lý khi phát sinh sự kiện. (Xử lý sự kiện)
Một số sự kiện thường gặp trong Android
Event Handler | Event Listener Name |
---|---|
onClick() | OnClickListener() Đăng ký sự kiện khi người dùng hoặc click hoặc chạm (touche) hoặc focuse trên bất ký widget như button, text, image vv. Chúng ta sẽ sử dụng phương onClick() để xử lý sự kiện. |
onLongClick() | OnLongClickListener() Đăng ký sự kiện khi người dùng hoặc click hoặc chạm (touche) hoặc focus trên bất ký widget như button, text, image vv. trong một hoặc nhiều giây. Chúng ta sẽ sử dụng phương onLongClick() để xử lý sự kiện. |
onFocusChange() | OnFocusChangeListener() Sự kiện phát sinh khi widget mất focus. |
onKey() | OnFocusChangeListener() Sự kiện phát sinh khi người dùng focus trên widget và nhấn (presse) hoặc thả (release) một phím trên thiết bị. |
onTouch() | OnTouchListener() Sự kiện phát sinh khi người dùng nhấn phím, nhả phím, hoặc bất kỳ cử chỉ chuyển động trên màn hình. |
onMenuItemClick() | OnMenuItemClickListener()Sự kiện phát sinh khi người dùng chọn một mục trong menu. |
onCreateContextMenu() | OnCreateContextMenuItemListener() Sự kiện phát sinh khi người dùng chọn một mục trong menu ngữ cảnh (Context Menu) |
Xử lý sự kiện trong android – Các cách đăng ký sự kiện
Cách 1: Thực thi interface tại Activity bằng lệnh sạu
implements Event_Listener_Name
Sau đó cài đặt tất cả các phương thức trong interface này.
Ví dụ đăng ký và xử lý sự kiện click cho nút Change. Khi người dùng click vào button này, ứng dụng sẽ thay đổi text của TextView thành “Xin chào bạn!”.
Giao diện ứng dụng khi chạy
Sau khi người dùng click vào nút Change
Thiết kế giao diện ứng dụng
Viết xử lý tại Activity
Cài đặt interface tên OnClickListener bằng cách bổ sung đoạn code
implements View.OnClickListener
NetBeans sẽ thông báo lỗi. Chúng ta sẽ click vào biểu tượng cái bóng đèn -> chọn Implement methods -> chọn OK như hình bên dưới.
NetBeans sẽ tự động phát sinh những phương thức đã được khai báo trong interface
Code hoàn chỉnh
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//Khai báo TextView
TextView tvDemo;
//Khai báo Button
Button btnChange;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Tham chiếu TextView có id là tvDemo
tvDemo = (TextView) findViewById(R.id.tvDemo);
//Tham chiếu Button có id là button
btnChange = (Button) findViewById(R.id.button);
//Đăng ký sự kiện cho Button
btnChange.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//Nếu người dùng click vào Button Change
if(v == btnChange) {
tvDemo.setText("Xin chào bạn!");
}
}
}
Cách 2: Tạo lớp nội (inner class)
Cú pháp:
widgetName.setEvent_Listener_Name(new View.Event_Listener_Name() {
@Override
public void Event_Handler(View v) {
//Cài đặt xử lý sự kiện
}
});
Ví dụ đăng ký và xử lý sự kiện click cho nút Hello. Khi người dùng click vào button này, ứng dụng sẽ thay đổi text của TextView thành “Hello World!”.
Thiết kế giao diện ứng dụng (Bổ sung thêm một button và đặt id là btnHello)
Viết xử lý tại Activity
Bổ sung thêm các đoạn code sau
Button btnHello;
//Tham chiếu Button có id là btnHello
btnHello = (Button) findViewById(R.id.btnHello);
//Đăng ký và xử lý sự kiện cho button
btnHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvDemo.setText("Hello World!");
}
});
Code hoàn chỉnh (Chú ý đoạn những chỗ in đậm là những đoạn code được bổ sung)
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//Khai báo TextView
TextView tvDemo;
//Khai báo Button
Button btnChange;
Button btnHello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Tham chiếu TextView có id là tvDemo
tvDemo = (TextView) findViewById(R.id.tvDemo);
//Tham chiếu Button có id là button
btnChange = (Button) findViewById(R.id.button);
//Đăng ký sự kiện cho Button
btnChange.setOnClickListener(this);
//Tham chiếu Button có id là btnHello
btnHello = (Button) findViewById(R.id.btnHello);
//Đăng ký và xử lý sự kiện cho button
btnHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvDemo.setText("Hello World!");
}
});
}
@Override
public void onClick(View v) {
//Nếu người dùng click vào Button Change
if(v == btnChange) {
tvDemo.setText("Xin chào bạn!");
}
}
}
Ứng dụng khi chạy
Khi người dùng click vào Change
Khi người dùng click vào Hello
Cách 3: Tạo phương thức và gọi phương thức tại thuộc tính onClick của widget
Cú pháp khai báo phương thức:
public void methodName(View v) {
//Viết xử lý sự kiện
}
Ví dụ đăng ký và xử lý sự kiện click cho nút Exit. Khi người dùng click vào button này, ứng dụng sẽ bị đóng.
Thiết kế giao diện
Viết xử lý
Tạo phương thức tên exitAction và viết xử lý
Code hoàn chỉnh
import android.app.Application;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//Khai báo TextView
TextView tvDemo;
//Khai báo Button
Button btnChange;
Button btnHello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Tham chiếu TextView có id là tvDemo
tvDemo = (TextView) findViewById(R.id.tvDemo);
//Tham chiếu Button có id là button
btnChange = (Button) findViewById(R.id.button);
//Đăng ký sự kiện cho Button
btnChange.setOnClickListener(this);
//Tham chiếu Button có id là btnHello
btnHello = (Button) findViewById(R.id.btnHello);
//Đăng ký và xử lý sự kiện cho button
btnHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvDemo.setText("Hello World!");
}
});
}
@Override
public void onClick(View v) {
//Nếu người dùng click vào Button Change
if(v == btnChange) {
tvDemo.setText("Xin chào bạn!");
}
}
public void exitAction(View v) {
finish();
}
}
Gọi phương thức exitAction sử dụng thuộc tính onClick tại layout
Giao diện ứng dụng khi chạy
Khi người dùng click vào nút Exit, ứng dụng sẽ bị đóng.
Xử lý sự kiện trong android – Bài tập thực hành
Bài thực hành số 1: Xây dựng ứng dụng tìm số nhỏ nhất trong 2 số.
Bài thực hành số 2: Xây dựng ứng dụng nhập vào một năm dương lịch và thực hiện chuyển sang năm âm lịch tương ứng.
Hướng dẫn thực hiện chuyển năm dương lịch sang năm âm lịch
Bài thực hành số 3: Xây dựng ứng dụng giải phương trình bậc nhất ax + b = 0