Sự kiện trong android là một cá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 của ứng dụng. Giống như nút bấm hoặc các thao tác cảm ứng trên màn hình ,.. vv. Trong ứng dụng Android duy trì một tá các thao tác sự kiện, đặc biệt là Button dùng để tạo sự kiện. Bạn có thể nắm bắt những sự kiện trong app của bạn và có hành động thích hợp theo yêu cầu.
Ba khái niệm liên quan đến quản lý sự kiện Android :
- Event Listeners : Event Listeners là một giao diện trong lớp View có chứa một phương thức đơn gọi lại duy nhất. Những phương thức này sẽ được gọi bởi các framework Android khi View đã được đăng ký được kích hoạt bởi người dùng tương tác với các mục trong giao diện người dùng.
- Event Listeners Registration : Event Registration là quá trình mà theo đó một Event Handlers được đăng ký với Event Listener để xử lý được gọi khi Event Listener kích hoạt.
- Event Handlers : Khi một sự kiện xảy ra và chúng đã đăng ký một Event Listeners cho sự kiện này, Event Listeners bắt đầu gọi Event Handlers, đó là phương thức chính để xử lý sự kiện.
Event Listeners & Event Handlers
Xử lý sự kiện | Event Listener & Chú thích |
---|---|
onClick() | OnClickListener ()
Hàm này được gọi khi người dùng chạm vào bất kỳ widget button, văn bản, hình ảnh ,… Bạn sẽ sử dụng onClick () event handler để xử lý các sự kiện như vậy. |
onLongClick () |
OnLongClickListener () Hàm này được gọi khi người dùng nhấn vào bất kỳ widget button, văn bản, hình ảnh, vv trong khoảng 2s trở lên. Bạn sẽ sử dụng onLongClick () event handler để xử lý các sự kiện như vậy. |
onFocusChange () |
OnFocusChangeListener () Hàm này được gọi khi người dùng thay đổi hay rời khỏi đối tượng đang lựa chọn, bạn sẽ sử dụng onFocusChange() event handler để xử lý sự kiện này. |
onkey () |
OnFocusChangeListener () Hàm này được gọi khi người sử dụng nhấn giữ một phím cứng nào đó trên thiết bị. Bạn sẽ sử dụng onKey () event handler để xử lý các sự kiện như vậy. |
onTouch () |
OnTouchListener () Hàm này được gọi 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. Bạn sẽ sử dụng onTouch () event handler để xử lý các sự kiện như vậy. |
onMenuItemClick () |
OnMenuItemClickListener () Hàm này được gọi khi người dùng chọn một mục trình đơn (menu item). Bạn sẽ sử dụng onMenuItemClick () event handler để xử lý các sự kiện như vậy. |
onCreateContextMenu () |
onCreateContextMenuItemListener () Hàm này được gọi khi các menu ngữ cảnh đang được xây dựng. |
Event Listeners Registration
Event Registration là quá trình mà theo đó một Event Handler được đăng ký với Event Listener để xử lý được gọi khi Event Listener bắt đầu các sự kiện. Mình sẽ liệt kê 3 cách được sử dụng nhiều nhất, trong đó bạn có thể sử dụng bất kỳ của 1 trong 3 cách này .
- Sử dụng một Anonymous Inner Class.
- Sử dụng lớp Hoạt động thực hiện giao diện Listener.
- Sử dụng Layout file activity_main.xml chỉ định xử lý sự kiện trực tiếp.
Demo xử lý sự kiện trong Android
Trong ví dụ dưới đây mình xin làm bài demo về các phép toán công trừ nhân chia được nhập vào từ bàn phím và hiện ra kết quả khi click vào button tương ứng:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="dev4u.com.demoeventhandling.MainActivity"> <EditText android:id="@+id/edSoA" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Nhập số A" android:inputType="number" /> <EditText android:id="@+id/edSoB" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Nhập số B" android:inputType="number" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="4"> <Button android:id="@+id/btnCong" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cộng" /> <Button android:id="@+id/btnTru" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text=" Trừ" /> <Button android:id="@+id/btnNhan" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Nhân" /> <Button android:id="@+id/btnChia" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Chia" /> </LinearLayout> <TextView android:id="@+id/tvKetQua" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Kết Quả : " android:textSize="20dp" android:textStyle="bold" /> </LinearLayout>
MainActivity
package dev4u.com.demoeventhandling; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { //Khai báo các đối tượng View có trong file activity_main.xml EditText edSoA, edSoB; Button btnCong, btnTru, btnNhan, btnChia; TextView tvKetQua; int soA; int soB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Định nghĩa các đối tượng View tương ứng với các ID có trong file xml edSoA = (EditText) findViewById(R.id.edSoA); /* Bạn cũng có thể khai báo trực tiếp ở đây bằng cú pháp sau nhưng không nên vì sẽ khó quản lý code của bạnysvaf trông thiếu chuyên nghiệp EditText edSoA=(EditText) findViewById(R.id.edSoA); */ edSoB = (EditText) findViewById(R.id.edSoB); btnCong = (Button) findViewById(R.id.btnCong); btnTru = (Button) findViewById(R.id.btnTru); btnNhan = (Button) findViewById(R.id.btnNhan); btnChia = (Button) findViewById(R.id.btnChia); tvKetQua = (TextView) findViewById(R.id.tvKetQua); //Xử lý sự kiện cho các button Cộng Trừ Nhân Chia //Đây là cách xử lý sự kiện cho các button được sử dụng phổ biến nhất btnCong.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { epKieu(); //Gán kết quả cho TextView KetQua tvKetQua.setText("Kết Quả: " + Cong(soA, soB)); } }); btnTru.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { epKieu(); //Gán kết quả cho TextView KetQua tvKetQua.setText("Kết Quả: " + Tru(soA, soB)); } }); btnNhan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { epKieu(); //Gán kết quả cho TextView KetQua tvKetQua.setText("Kết Quả: " + Nhan(soA, soB)); } }); btnChia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { epKieu(); //Gán kết quả cho TextView KetQua tvKetQua.setText("Kết Quả: " + Chia(soA, soB)); } }); } //Ép kiểu cho số A và số B, vì mặc định tham sô truyền vào là kiểu ký tự private void epKieu() { soA = Integer.parseInt(edSoA.getText().toString()); soB = Integer.parseInt(edSoB.getText().toString()); } // Hàm cộng 2 số a và b private int Cong(int a, int b) { return (a + b); } // Hàm trừ 2 số a và b private int Tru(int a, int b) { return (a - b); } // Hàm nhân 2 số a và b private int Nhan(int a, int b) { return (a * b); } // Hàm chia 2 số a và b private double Chia(double a, double b) { return (a / b); } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dev4u.com.demoeventhandling"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Lời kết
Mặc dù là hơi loằng ngoằng dài dòng và khó hiểu 1 chút nhưng mong là qua bài viết này bạn có thể hiểu rõ hơn một chút về xử lý sự kiện trong ứng dụng android – Event handling in Android. Trong quá trình tìm hiểu nếu bạn gặp bất kỳ lỗi nào hay có bất kỳ góp ý hay chia sẻ gì, mong bạn có thể để lại comment bên dưới hoặc gửi mail về [email protected]. Xin cảm ơn!!