Search…

Event Listeners trong Android

Nguyễn NghĩaNguyễn Nghĩa
15/11/20203 min read
Bắt sự kiện và xử lý sự kiện trong Android, tìm hiểu về các event listener.

Events được hiểu là 1 hành động xảy ra và phải xử lý hành động như thế nào? Ví dụ, khi nhấn vào button hoặc nhấn vào 1 item trên ListView thì sẽ xảy ra 1 sự kiện. 

1 số sự kiện của View

Đa số các View trong Android đều có các event listener dưới đây:

  • setOnClickListener : gọi khi View được nhấp chuột.
  • setOnDragListener: gọi khi View được kéo.
  • setOnFocusChangeListener: gọi khi View được thay đổi focus.
  • setOnHoverListener: gọi khi View được rê chuột.
  • setOnKeyListener: gọi khi nhấn phím (hardware input) và View được focus.
  • setOnLongClickListener: gọi khi View được nhấn và giữ.
  • setOnTouchListener: gọi khi View được chạm xuống và chạm lên.

Cách sử dụng Event Listener trong Android

Để sử dụng listener lấy các phương thức trên để đặt bộ lắng nghe sự kiện và xử lý công việc được implement của interface.

Ví dụ về event listener khi nhấn vào button

Trong file XML:

<Button
 android:id="@+id/btn_show"
 android:text="Show"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

Trong file Java:

Button btnShow = (Button)findViewById(R.id.btn_show);
btnShow.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
     // TODO something
  }
});

Phương thức setOnClickListener() đặt bộ lắng nghe sự kiện, và interface OnClickListener là định nghĩa cho 1 callback trong phương thức onClick(View v) được gọi khi 1 button được nhấp.

1 event listener là 1 interface trong lớp View chứa 1 phương thức callback. Có thử tạo View và gõ view.setOn, Android Studio sẽ thể hiện tất cả các event listener của View đó.

1 số Event thường dùng

Button

Button thường dùng nhất là sự kiện onClick(), ngoài ra có thể thử các sự kiện khác để hiểu rõ thêm.

EditText

EditText có 1 số sự kiện như dưới đây:

  • addTextChangedListener: xảy ra mỗi lần khi văn bản của EditText thay đổi.
  • setOnEditorActionListener: xảy ra khi có 1 hành động trên bàn phím được nhấn.

Ví dụ sử dụng addTextChangedListener:

EditText etValue = (EditText) findViewById(R.id.etValue);
etValue.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // Fires right as the text is being changed (even supplies the range of text)
    }

    @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // Fires right before text is changing
    }

    @Override
    public void afterTextChanged(Editable s) {
        // Fires right after the text has changed
        tvDisplay.setText(s.toString());
    }
});

ListView

Các event listener thường sử dụng với ListView được mô tả chi tiết như sau:

  • setOnItemClickListener: được gọi khi 1 item trên ListView được nhấp vào.
  • setOnItemLongClickListener: được gọi khi 1 item trên ListView được nhấp vào và giữ.
  • setOnItemSelectedListener: được gọi khi item được chọn.

Ví dụ:

lvPlace.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      // TODO something
   }
});
      
lvPlace.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
  @Override
   public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
       // TODO something
       return false;
   }
});
        
lvPlace.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
   @Override
   public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
       // TODO something     
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
       // TODO something
    }
});
IO Stream

IO Stream Co., Ltd

developer@iostream.co
383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2025