Bản chất của Event trong Java, Android

Giới thiệu

Chắc hẳn khi mới lập trình giao diện (GUI) các bạn rất thắc mắc là Event là gì, tại sao khi chúng ta click vào một button lại có 1 phương thức để xử lý như vậy và truyền những tham số cần thuyết qua hàm này cho chúng ta sử dụng. Ví dụ khi click vào Button trong Android

Hay khi nhấn vào một item trên ListView.

Thật sự, đối với những người mới tiếp xúc rất khó hiểu, tại sao lại có những event này và nó được xây dựng như thế nào. Thì bài viết này sẽ giải thích cho bạn rõ và xây dựng event để các bạn nắm rõ mảng kiến thức này.

Event là gì?

Event được hiểu là một khi hành động được xảy ra thì sẽ phát sinh, hay thông báo cho chúng ta sẽ phản hồi với hành động như thế nào. Ví dụ khi click vào button thì chúng ta sẽ xử lý những đoạn mã của chúng ta trong phương thức callback onClick của interface OnClickListener.

Tôi nói câu trên nhiều bạn nghĩ sao nó giống if else vậy. Chúng ta cùng phân tích nhé.

Giả sử tôi có 1 sản phẩm, khi giá của sản phẩm này thay đổi thì tôi sẽ xuất ra thông báo. Cùng phần tích hai trường hợp theo hướng if elseevent

if else

Được hiểu đúng nghĩa là: “Nếu giá của sản phẩm thay đổi thì xuất ra thông báo”.

event

Được hiểu là: “Một khi giá của sản phẩm thay đổi thì xuất ra thông báo”.

Xây dựng Event trong Java, Android

Để dễ hiểu hơn chúng ta sẽ cùng nhau xây dựng Event trong Android như sau.

Tôi có một sản phẩm và khi sản phẩm đó có giá thay đổi thì sẽ phát sinh ra sự kiện thông báo giá thay đổi và gửi kèm thông tin là giá cũ và giá mới.

Class Product bao hồm hay thuộc tính là name (tên sản phẩm) và price (giá sản phẩm)

Bước thứ hai  chúng ta sẽ tạo một interface OnPriceChanged

Cuối chúng là chúng ta sẽ triển khai event OnPriceChanged trong model Product của chúng ta

Ở đây chúng ta sẽ triển khai event trong phương thức setPrice để kiểm tra giá thay đổi. Nếu giá thay đổi và có đăng kí event (nghĩa là mListener != null) thì chúng ta sẽ phát sinh sự kiện onChanged và gửi kèm hai giá trị là oldPrice và newPrice của Product.

Sử dụng Event

Trước tiên tôi sẽ tạo một Project và set giá trị ban đầu cho nó với name là “Iphone 7 Plus” và price có giá trị 2000000 (20 triệu). Tiếp theo sẽ set bộ lắng nghe sự kiện trên đối tượng product để lắng nghe sự kiện onChaged (Sự kiện giá thay đổi của sản phẩm).

Và mỗi khi bạn thay đổi giá của sản phẩm thì phương thức onChanged luôn luôn được gọi.

Lời kết

Đến cuối bài này thì tôi hy vọng rằng các bạn có thể hiểu được event trong Java cũng như hiểu được các event của View như onClickListener hay onItemClick của ListView. Nếu các bạn là một người làm UI và thường xuyên phải viết View cho ứng dụng thì kiến thức này các bạn sử dụng rất nhiều trong quá trình làm việc.

8 thoughts on “Bản chất của Event trong Java, Android”

  1. ad cho mình hỏi chút nha và mong nhận được câu trả lời sớm từ ad. Theo mình biết thì không thể tạo được đối tượng từ một interface nhưng mình xem bài thì có đoạn làm mình không hiểu:
    new OnPriceChanged() {
    @Override
    public void onChanged(double oldPrice, double newPrice) {
    Log.e(TAG, “onChanged: ” + “oldPrice: ” + oldPrice + “, newPrice: ” + newPrice);
    }
    }

      1. Đúng như bạn đề cập là chúng ta không thể tạo được đối tượng từ interface do interface chỉ là một khuôn mẫu cho các lớp khác implement nó. Nhưng ví dụ trên bạn tạo một interface và có implement các phương thức trong interface thì có thể được bạn nhé, vì nó đã implement các phương thức.

        1. Mình không biết hiểu thế này có đúng không, mình nói sai chỗ nào ad sửa dùm mình nha.
          Phương thức setOnPriceChangedListener() nhận vào đối số là một biến tham chiếu có implements một interface. Và:
          new OnPriceChanged() {
          @Override
          public void onChanged(double oldPrice, double newPrice) {
          Log.e(TAG, “onChanged: ” + “oldPrice: ” + oldPrice + “, newPrice: ” + newPrice);
          }
          }
          chính là đối tượng vô danh implements interface.

          1. ok. mình có gửi lời mời với ad rồi đó. Có vấn đề mình sẽ nhờ ad giải đáp nhé.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.