Home > Flash/Flex/AIR > How to use Event Handling in coding Flash & Android

How to use Event Handling in coding Flash & Android

Topic này mình thảo luận về cách tốt nhất để dùng event handling trong flash và trong android. Ở đây mình lấy trường hợp chúng ta đang xây dựng một menu (vừa có xử lý chung và riêng cho các item menu). Trước khi nói về vấn đề này bạn cần tìm hiểu về Event trong flash  và android sdk http://developer.android.com/guide/topics/ui/ui-events.html

Khi click vào các item menu có 2 cách để bạn listen sự kiện:
C1: Mỗi item menu bạn đều add cho nó 1 hàm lắng nghe sự kiện click.
C2: Các item menu được click đều add 1 hàm duy nhất để xử lý chung.

Như ta đã biết các ứng dụng ở client, đặc biệt là trên web và mobile phải đc optimize tốt. Khi một hàm addEventListner(EventB, functionA) được gọi thì functionA sẽ được đưa vào một dictionnary tương ứng với EventB, tương tự dictionnary[EventB] = Array[functionA]
Khi EventB được khởi động flash sẽ dò dictionnary để tìm ra array các function được add và thực hiện function này.
Khi vậy khi ta add quá nhiều Event thì sẽ bành chướng dictionnary này của flash, kéo theo việc tìm kiếm event sẽ chậm hơn cho tất cả event khác (vì dictionnary này dùng chung), hơn nữa mỗi lần add ta dùng 1 hàm khác nhau cho mỗi đối tượng sẽ làm to thêm kích thước Array Function. Điều này có thể nói sẽ làm tăng độ phức tạp khi tìm kiếm một event được khởi động

Cách tốt nhất để giảm tải việc này ta đơn giản chỉ cần add 1 Function cho cùng các Event được khởi động từ các đối tượng khác nhau:

Ví dụ với 1 menu có menuItemA, menuItemB, menuItemB, . . . ta chỉ cần
menu.addEventListener(MouseEvent.CLICK, clickMenuHandler);

function clickMenuHandler(e: MouseEvent) {
//e.target chính là menu được click, được dùng cho nhưng xử lý chung (như highlight, focus . . .)
//Ta dùng switch case cho những xử lý riêng.
}
Như vậy ta chỉ thêm vào dictionnary event của flash 1 phần tử dictionary[MouseEvent.Click_Menu] = Array[clickMenuHandler];

Nếu ta viết theo cách add cho từng Item Menu như sau:
menuItem1.addEventListener(MouseEvent.CLICK, clickMenuItem1Handler);
menuItem2.addEventListener(MouseEvent.CLICK, clickMenuItem2Handler);
menuItem3.addEventListener(MouseEvent.CLICK, clickMenuItem3Handler);

hoặc cùng 1 hàm:

menuItem1.addEventListener(MouseEvent.CLICK, clickMenuItemHandler);
menuItem2.addEventListener(MouseEvent.CLICK, clickMenuItemHandler);
menuItem3.addEventListener(MouseEvent.CLICK, clickMenuItemHandler);

ta sẽ thêm vào dictionary event của flash 3 phần tử
dictionary[MouseEvent.Click_MenuItem1] = Array[clickMenu1Handler];
dictionary[MouseEvent.Click_MenuItem2] = Array[clickMenu2Handler];
dictionary[MouseEvent.Click_MenuItem3] = Array[clickMenu3Handler];

hoặc
dictionary[MouseEvent.Click_MenuItem1] = Array[clickMenuHandler];
dictionary[MouseEvent.Click_MenuItem2] = Array[clickMenuHandler];
dictionary[MouseEvent.Click_MenuItem3] = Array[clickMenuHandler];

Điều này làm bành chướng kích thướt của dictionnary event , 1 dictionnary sử dụng chung trong việc tìm kiếm function khi 1 event được khởi động, kích thướt sẽ làm ảnh hưởng tới việc tìm kiếm chung các event khác.

Tương tự đối với android,  cần 1 đối tượng listener, ta có thể tiết kiệm số lượng listener bằng cách add các menuItem cùng 1 listner và xử lý chúng bằng switch case:

Ví dụ 1 activity như sau:
public class RegisterForm extends Activity implements OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);

submitButton.setOnClickListener(this);
updateInfoButton.setOnClickListener(this);
continueButton.setOnClickListener(this);
}

public void onClick(View view) {
// TODO Auto-generated method stub
switch(view.getId()) {
case R.id.submitButton:

break;

case R.id.updateInfoButton:

break;

case R.id.continueButton:

break;

}
}

Bên cạnh đó, việc quản lý các event của các đối tượng trong 1 hàm tiện lợi cho dev về xử lý riêng và xử lý chung (chúng ta không phải duplicate những dòng code xử lý chung nếu add nhiều EventListener function).

Categories: Flash/Flex/AIR Tags:
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: