Xử lý Sự kiện trong Android

Một phần của tài liệu Bài giảng Phát triển ứng dụng cho các thiết bị di động: Phần 1 (Trang 109 - 113)

Phần trên vừa trình bày về cách tạo giao diện ứng dụng Android với các view. Khi người dùng sử dụng ứng dụng, người dùng sẽ tương tác với các view này, các view nhận được các tương tác từ người dùng sẽ xử lý các sự kiện tương ứng. Các sự kiện này được Android Framework quản lý bởi 1 hàng đợi (queue) hoạt động theo cơ chế FIFO (First In First Out).

- Các bước cần làm để xử lý sự kiện cho các đối tượng giao diện: - Đăng ký lắng nghe sự kiện (Event Listenters Registration).

- Khai báo đối tượng nhận thông báo khi có sự kiện xuất hiện (Event Listenters).

- Xử lý sự kiện (Event Handlers)

Đăng ký lắng nghe sự kiện

Có 3 cách để đăng ký lắng nghe sự kiện cho đối tượng giao diện trong ứng dụng: - Sử dụng Anonymous Inner Class

- Khai báo thuộc tính sự kiện cho view trong file giao diện XML. - Khai báo lớp Activity thực thi giao diện Listener.

Bảng 2.2. Các Event Listener và Event Handler

Event Handler Event Listenter

onClick() OnClickListener()

Được gọi khi người dùng nhấn/ chạm vào widget. Event Listener nàysẽ gọi phương thức onClick() để xử lý sự kiện.

onLongClick()

OnLongClickListener()

Được gọi khi người dùng nhấn/ chạm lì vài giây vào widget. EventListener này sẽ gọi phương thức onLongClick() để xử lý sự kiện.

onFocusChange()

OnFocusChangeListener()

Được gọi khi người dùng không tập trung vào widget. Event Listenernày sẽ gọi phương thức onFocusChange() để xử lý sự kiện.

onKey()

OnFocusChangeListener()

Được gọi khi người dùng thao tác với các phím bấm của thiết bị.Event Listener này sẽ gọi phương thức onkey() để xử lý sự kiện.

onTouch() OnTouchListener()

Được gọi khi người dùng chạm vào màn hình thiết bị. Event Listenernày sẽ gọi phương thức onTouch() để xử lý sự kiện. onMenuItemClick()

OnMenuItemClickListener()

Được gọi khi người dùng chọn menu item. Event Listener này sẽ gọi phương thức onMenuItemClick () để xử lý sự kiện.

Minh họa việc xử lý sự kiện cho view trong ứng dụng Android theo 3 cách đăng ký sự kiện

Cách 1: Đăng ký và xử lý sự kiện sử dụng Anonymous Inner Class

• Sử dụng project BasicView1 đã tạo ra ở trên. Chỉnh sửa mã nguồn cho file BasicView1Activity.java bằng cách thêm vào các nội dung in đậm sau:

package net.learn2develop.BasicViews1;

import android.app.Activity;

import android.os.Bundle; import android.view.View;

import android.widget.Button; import android.widget.CheckBox; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; import android.widget.ToggleButton;

public class BasicViews1Activity extends Activity {

/** Called when the activity is first created. */ @Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.main);

//---Button view---

Button btnOpen = (Button)findViewById(R.id.btnOpen); btnOpen.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

DisplayToast("You have clicked the Open button");

} });

//---Button view---

btnSave.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

DisplayToast("You have clicked the Save button");

} });

//---CheckBox---

CheckBox checkBox = (CheckBox)findViewById(R.id.chkAutosave); checkBox.setOnClickListener(new View.OnClickListener()

{

public void onClick(View v) {

if (((CheckBox)v).isChecked()) DisplayToast("CheckBox is checked"); else DisplayToast("CheckBox is unchecked"); } }); //---RadioButton---

RadioGroup radioGroup = (RadioGroup) findViewById(R.id.rdbGp1); radioGroup.setOnCheckedChangeListener(new

OnCheckedChangeListener() {

public void onCheckedChanged(RadioGroup group, int checkedId) { RadioButton rb1 = (RadioButton) findViewById(R.id.rdb1);

if (rb1.isChecked()) { DisplayToast("Option 1 checked!"); } else { DisplayToast("Option 2 checked!"); } } }); //---ToggleButton--- ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggle1); toggleButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

if (((ToggleButton)v).isChecked()) DisplayToast("Toggle button is On");

else

DisplayToast("Toggle button is Off");

} });

}

private void DisplayToast(String msg) {

Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show(); }

}

Bấm F11 để debug ứng dụng trên Android emulator.

Bấm chọn các view và quan sát nội dung thông điệp hiển thị ở cửa sổ Toast.

Giải thích:

hàm findViewById():

Phương thức setOnClickListener() đăng ký phương thức callback onClick(), onClick() được gọi khi Button btnOpen được click.

CheckBox

Để xác định trạng thái của CheckBox, ta ép kiểu tham số của hàm onClick() thành CheckBox, sau đó gọi phương thức isChecked()

RadioButton

Phương thức setOnCheckedChangeListener() của RadioGroup đăng ký phương thức callback onCheckedChanged().

Hàm onCheckedChanged() được gọi khi một trong số RadioButton chuyển sang trạng thái checked. Trong hàm này, RadioButton được lấy về theo id (rdb1), sau đó gọi hàm isChecked() để xác định RadioButton rdb1 được chọn hay không. Ngoài ra hàm onCheckedChanged() có chứa tham số thứ 2 là checkId chính là id của RadioButton được chọn.

Cách 2: Đăng ký sự kiện cho view trong file giao diện,cài đặt phương thức xử lý sự kiện trong source code

Thêm thuộc tính sự kiện cho view trong file giao diện .xml. Cụ thể : để xử lý sự kiện click vào Button, ta thêm thuộc tính onClick của <Button> trong main.xml

chính là tên của sự kiện. Để xử lý sự kiện cho button này, thêm hàm btnSaved_clicked() trong file BasicViews1Activity.java (chú ý hàm btnSaved_clicked() có tham số truyền vào là một đối tượng của lớp View).

Cách 3: Đăng sự kiện bằng cách khai báo lớp Activity thực thi giao diện Listener

Viết code cho BasicViews1Activity.java như sau

package net.learn2develop.BasicViews1;

import android.app.Activity;

import android.os.Bundle; import android.view.View;

import android.view.View.OnClickListner; import android.widget.Button; import android.widget.CheckBox; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; import android.widget.ToggleButton;

public class BasicViews1Activity extends Activity implements

OnclickListener{

/** Called when the activity is first created. */ @Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.main);

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

// -- register click event with button ---

btnOpen.setOnClickListener(this);

}

//--- Implement the OnClickListener callback

public void onClick(View v) { if(v.getId() == R.id.button_s) {

DisplayToast("You have clicked the Open button");

} }

Một phần của tài liệu Bài giảng Phát triển ứng dụng cho các thiết bị di động: Phần 1 (Trang 109 - 113)

Tải bản đầy đủ (PDF)

(123 trang)